Le code valide en C et C peut-il se comporter différemment avec les compilateurs spécifiques à un langage ?
C et C partagent de nombreuses similitudes, mais des différences notables exister. Cela soulève la question de savoir si un code valide dans les deux langages pourrait présenter des comportements distincts lorsqu'il est compilé à l'aide de compilateurs spécifiques pour chaque langage.
Ignorer les hacks liés au préprocesseur et supposer l'uniformité dans les aspects définis par l'implémentation, un scénario dans lequel une telle divergence de comportement se pose est la gestion des appels de fonctions et des déclarations d'objets.
Dans ce contexte, l'exemple ci-dessous démontre la disparité entre C et C :
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
En C , ce code déclenche la création de un objet f temporaire qui est immédiatement détruit. Ainsi, il ne produit aucune sortie.
En revanche, C90 permet d'appeler des fonctions non déclarées. En conséquence, le code affichera "bonjour" lorsqu'il sera compilé avec un compilateur C90.
Cette différence est enracinée dans le fait que C90 traite la déclaration f() comme un appel de fonction, tandis que C l'interprète comme le déclaration d'un objet f. Cette distinction met en évidence les nuances subtiles qui peuvent conduire à des comportements variables selon les différents langages de programmation.
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!