Я нашел эту программу C в сети:
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
В этой программе интересно то, что когда она компилируется и запускается в режиме C89, она печатает, C89
а когда она компилируется и запускается в режиме C99, она печатает C99
. Но я не могу понять, как работает эта программа.
Вы можете объяснить, как работает второй аргумент printf
в указанной выше программе?
//
комментарий в стиле C ++ появился в C99.gcc
. Безstd=c99
предупреждения вы получите предупреждение, а если проигнорируете его,gcc
все равно будет интерпретироваться//
как начало комментария (ах, вы тоже должны использовать-pedantic
. У меня этоC89
с явнымstd=c89
в gcc 4.9.2.#if __STDC_VERSION__ >= 199901L
, а не//
трюк с комментариями. =)Ответы:
C99 разрешает
//
комментарии в стиле -style, C89 - нет. Итак, чтобы перевести:C99:
C89:
источник
комментарий к строке
//
введен с C99. Поэтому ваш код равен этому в C89и равно этому в C99
источник
Поскольку
//
комментарии существуют только в стандартах C99 и более поздних версиях, код эквивалентен следующему:Правильный код будет:
источник