déclaration implicite en C
-
30-09-2019 - |
Question
Est-ce que le programme suivant Invoke Undefined Behaviour
en C?
int main()
{
printf("Printf asking: Where is my declaration ?");
}
Dans le programme ci-dessus il y a une déclaration implicite de printf()
, est donc le code ci-dessus entièrement conforme à la norme ou il a juste un comportement spécifique de mise en œuvre?
La solution
Oui, il le fait. Ne pas avoir une déclaration portée est UB.
J.2 comportement non défini
- Pour appel à une fonction sans prototype de la fonction portée lorsque le fonction est définie par une fonction prototype, soit les extrémités des prototypes avec des points de suspension ou les types de la arguments après la promotion ne sont pas compatible avec les types de paramètres (6.5.2.2).
En outre, notez que chute principale est correct dans C99 (à savoir sémantiquement équivalent à un return 0;
). Pour les compilateurs compatibles pré-C99 vous avez besoin d'une déclaration de retour où le type de retour de la fonction principale est un type compatible avec int
.