Encontrei este programa C na Web:
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
O interessante deste programa é que, quando é compilado e executado no modo C89, ele é impresso C89
e quando é compilado e executado no modo C99, é impresso C99
. Mas não sou capaz de descobrir como esse programa funciona.
Você pode explicar como o segundo argumento printf
funciona no programa acima?
//
comentário no estilo C ++ foi introduzido no C99.gcc
. Semstd=c99
você receberá um aviso, e se você ignorá-lo,gcc
vai ainda interpretar a//
como início de comentário (ah - você tem que usar-pedantic
. Bem eu tenho que por padrão.)C89
com explícitostd=c89
no gcc 4.9.2.#if __STDC_VERSION__ >= 199901L
, não o//
truque de comentários. =)Respostas:
C99 permite
//
comentários no estilo, C89 não. Então, para traduzir:C99:
C89:
fonte
o comentário da linha
//
é introduzido desde C99. Portanto, seu código é igual a isso em C89e igual a isso em C99
fonte
Como os
//
comentários existem apenas nos padrões C99 e posteriores, o código é equivalente ao seguinte:O código correto seria:
fonte