promozioni argomento in chiamate di funzione C
-
05-10-2019 - |
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?
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.