dichiarazione implicita in C
-
30-09-2019 - |
Domanda
Fa il seguente programma invoke Undefined Behaviour
in C?
int main()
{
printf("Printf asking: Where is my declaration ?");
}
Nel programma precedente v'è una dichiarazione implicita di printf()
, quindi è compatibile con il codice di cui sopra completamente standard o ha solo alcuni comportamenti implementazione specifica?
Soluzione
Sì lo fa. Non avendo una dichiarazione di portata è UB.
comportamento J.2 non definita ??strong>
- Per chiamata a una funzione senza un prototipo di funzione di portata in cui il funzione è definita una funzione prototipo, sia le estremità prototipo con un'ellissi oi tipi di argomenti che seguono promozione non sono compatibile con i tipi della parametri (6.5.2.2).
Inoltre, nota che cadere principale va bene a C99 (cioè equivalente alla return 0;
). Per la pre-C99 compilatori conformi hai bisogno di una dichiarazione di ritorno in cui il tipo di ritorno della funzione principale è un tipo compatibile con int
.