*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

понедельник, 9 марта 2009 г.

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++
Результат повеселил некоторых моих коллег.

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