Domanda

Ho imparato da ---- Per quanto riguarda le promozioni quando predefinite calci in:. Predefinita promozioni di argomento vengono utilizzati esattamente quando il tipo di attesa dell'argomento è sconosciuta, vale a dire quando non c'è prototipo o quando l'argomento è variadic

Ma un esempio mi confonde è:

void func(char a, char b)
{
    printf("a=%p,b=%p\n",&a,&b);    
}

int main(void)
{
    char a=0x11,b=0x22;

    func(a,b);

    return 0;
}

Si cleard nell'esempio precedente: le chiamate in funz principale, non v'è alcuna necessità di promuovere gli argomenti a e b, ma gli spettacoli uscita e a = b & +4 non & a = b & + 1. Se nessuna promozione è verificato, perché 4 byte tra due tesi CHAR?

È stato utile?

Soluzione

Perché le sente compilatore come fare in questo modo: -)

Non è possibile dedurre che un argomento è o non è stata promossa solo guardando al suo indirizzo. Non c'è alcun obbligo che gli argomenti da passare continguously sullo stack (o anche che sono passati su una pila a tutti, è per questo).

Il compilatore (e convenzioni di chiamata per la piattaforma) potrebbe specificare che lo stack è sempre mantenuto a 4 byte allineati, ma questo è un dettaglio specifico dell'implementazione, non fa parte dello standard linguaggio C.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top