last estandar compiler c printf comments c99 c89

estandar - ¿Cómo sale el siguiente programa `C89` cuando se compila en modo C89 y` C99` cuando se compila en modo C99?



estandar c99 (3)

He encontrado este programa C de la web:

#include <stdio.h> int main(){ printf("C%d/n",(int)(90-(-4.5//**/ -4.5))); return 0; }

Lo interesante de este programa es que cuando se compila y ejecuta en modo C89, imprime C89 y cuando se compila y ejecuta en modo C99, imprime C99 . Pero no puedo entender cómo funciona este programa.

¿Puedes explicar cómo funciona el segundo argumento de printf en el programa anterior?


C99 permite comentarios al estilo // , C89 no. Entonces, para traducir:

C99:

printf("C%d/n",(int)(90-(-4.5 /*Some comment stuff*/ -4.5))); // Outputs: 99

C89:

printf("C%d/n",(int)(90-(-4.5/ -4.5))); /* so we get 90-1 or 89 */


Como // comentarios solo existen en C99 y estándares posteriores, el código es equivalente a lo siguiente:

#include <stdio.h> int main (void) { int vers; #if __STDC_VERSION__ >= 201112L vers = 99; // oops #elif __STDC_VERSION__ >= 199901L vers = 99; #else vers = 90; #endif printf("C%d", vers); return 0; }

El código correcto sería:

#include <stdio.h> int main (void) { int vers; #if __STDC_VERSION__ >= 201112L vers = 11; #elif __STDC_VERSION__ >= 199901L vers = 99; #else vers = 90; #endif printf("C%d", vers); return 0; }


el comentario de línea // se introduce desde C99. Por lo tanto, su código es igual a esto en C89

#include <stdio.h> int main(){ printf("C%d/n",(int)(90-(-4.5/ -4.5))); return 0; } /* 90 - (-4.5 / -4.5) = 89 */

e igual a esto en C99

#include <stdio.h> int main(){ printf("C%d/n",(int)(90-(-4.5 -4.5))); return 0; } /* 90 - (-4.5 - 4.5) = 99*/