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?

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top