В очередной раз узнал для себя новый потенциальный вопрос для “прогиба” на каком-нибудь тесте по языку С.
Программа x.c
:
#include <stdio.h> int main() { char s[4]; s[0] = 'C'; s[1] = s[2] = '+'; s[3] = 0; s[sizeof(' ') ^ 5] = 0; printf("%s\n", s); return 0; }
Компилируем и запускаем.
Visual Studio:
cl x.c && x
или в Cygwin:
gcc -o x x.c && x
Имеем следующий результат:
C
А теперь так:
cl /TP x.c && x
или в Cygwin:
g++ -o x x.c && x
Теперь программа печает иное:
C++
Результат повеселил некоторых моих коллег.
Нашел небольшой список еще некоторых “отличий” С и С++, но, пожалуй, этот самый неявный, а значит потенциально опасный.