J'ai trouvé ce programme C sur le Web:
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
La chose intéressante avec ce programme est que lorsqu'il est compilé et exécuté en mode C89, il imprime C89
et lorsqu'il est compilé et exécuté en mode C99, il imprime C99
. Mais je ne suis pas en mesure de comprendre comment ce programme fonctionne.
Pouvez-vous expliquer comment le deuxième argument de printf
fonctionne dans le programme ci-dessus?
//
commentaire de style C ++ a été introduit dans C99.gcc
. Sansstd=c99
vous un avertissement, et si vous l' ignorez,gcc
vous toujours interpréter le//
comme début d'un commentaire (ah - vous devez utiliser-pedantic
. De plus, j'ai que par défaut.)C89
avec explicitestd=c89
dans gcc 4.9.2.#if __STDC_VERSION__ >= 199901L
, pas l'//
astuce des commentaires. =)Réponses:
C99 autorise les
//
commentaires de style -style, C89 ne le fait pas. Donc, pour traduire:C99:
C89:
la source
le commentaire de ligne
//
est introduit depuis C99. Par conséquent, votre code est égal à cela dans C89et égal à cela en C99
la source
Étant donné que les
//
commentaires n'existent que dans les normes C99 et ultérieures, le code est équivalent à ce qui suit:Le code correct serait:
la source