Maison  >  Article  >  développement back-end  >  Un code valide en C et en C peut-il produire une sortie différente une fois compilé ?

Un code valide en C et en C peut-il produire une sortie différente une fois compilé ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-09 01:37:02699parcourir

Can Valid Code in Both C and C   Produce Different Output When Compiled?

Le code valide en C et en C peut-il présenter un comportement divergent une fois compilé ?

Malgré de nombreuses similitudes, il existe des différences subtiles entre C et C . Cela soulève la question : un code valide dans les deux langages peut-il encore produire des résultats différents lorsqu'il est compilé avec leurs compilateurs standards respectifs ?

Conditions préalables à une comparaison équitable

Pour assurer une comparaison significative comparaison, établissons certaines conditions :

  • Les directives du préprocesseur (par exemple, #ifdef) sont exclues.
  • Les aspects définis par l'implémentation sont identiques dans les deux langages.
  • Moderne les versions des normes sont comparées (par exemple, C90 ou version ultérieure et C 98).

Une disparité comportementale

Considérez l'extrait de code suivant :

#include <stdio.h>

struct f { int x; };

int main() {
    f();
}

int f() {
    return printf("hello");
}

En C , ce code n'entraînera aucune sortie, car un objet f temporaire est créé et détruit. Cependant, en C90, il affichera "bonjour" car les fonctions peuvent être invoquées sans déclaration préalable.

Cette variance résulte des interprétations distinctes de f() en C et C . En C, f() est traité comme un appel de fonction, tandis qu'en C , il est considéré comme une déclaration d'une structure.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn