sizeof('a') в С и C++

В очередной раз узнал для себя новый потенциальный вопрос для “прогиба” на каком-нибудь тесте по языку С.

Программа 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++

Результат повеселил некоторых моих коллег.

Нашел небольшой список еще некоторых “отличий” С и С++, но, пожалуй, этот самый неявный, а значит потенциально опасный.


Оригинальный пост | Disclaimer

Комментарии