Le chiamate di funzione in C non richiedono la visualizzazione di un prototipo, ma si consiglia vivamente di includere un prototipo corretto.
Il motivo è che se la definizione della funzione non corrisponde ai tipi degli argomenti della funzione dopo l'esecuzione dell'argomento della funzione predefinita, è molto probabile che si ottenga un comportamento indefinito.
Avere il prototipo corretto visibile significa che il compilatore può controllare gli argomenti di una chiamata di funzione e avvisare il programmatore in caso di mancata corrispondenza.
C non consente il sovraccarico delle funzioni, pertanto è possibile disporre di un solo prototipo per qualsiasi nome di funzione.
Le promozioni di argomento predefinito possono causare disallineamenti imprevisti.
E.g.
int main(int argc, char **argv)
{
short s = 5;
float f = 2.3f;
x(s, f); // x implicitly declared; default argument promotions performed
return 0;
}
int x(short t, float g) // Error: called with an int and a double
{
return (int)(t + g);
}
nella chiamata di funzione, perché non ha x
prototipo visibile (ancora), s
sarà promosso a int
e f
sarà promosso a double
. Questi sono argomento predefinito promozioni. Ciò provoca una mancata corrispondenza quando la funzione viene definita con un prototipo che prende uno short
e uno float
anche se questi sono i tipi originali degli argomenti che sono stati inoltrati.
Funzioni che richiedono un numero variabile di argomenti (ad es. Sintassi , ...
) deve sempre avere un prototipo visibile nel punto in cui vengono chiamati.
fonte
2011-02-06 16:39:40
Il punto in cui è stato commentato non causerà un errore di compilazione. 'function_x();' implicitamente dichiarerà 'function_x();' come una funzione non prototipata che restituisce un 'int'. È un errore che la funzione viene successivamente dichiarata come 'void', tuttavia. –