Для вас, language lawyers!
Oct. 26th, 2015 11:25 amНе пользуясь условной компиляцией или знанием, какие значения каких символов препроцессора определяет тот или иной компилятор, напишите программу, валидную и как С, и как С++, которая определяет, в каком стандарте языка она скомпилирована: C89, C99, C11, C++98 или C++11.
Отличить C89 от остальных языков легко, и отличить C от C++ на практике легко, а дальше?
В C11, в отличие от предыдущих версий, есть юникодные строки вида U"...."
#define HAS_UNICODE(U) (sizeof(U"x") > 2)
#include <stdio.h>
int main() { puts(HAS_UNICODE() ? "Yes" : "No"); }Аналогичный трюк в С++11, где есть "raw strings" вида R"(...)".