Для вас, 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"(...)".
no subject
Date: 2015-10-26 06:29 pm (UTC)no subject
Date: 2015-10-26 06:31 pm (UTC)no subject
Date: 2015-10-26 06:36 pm (UTC)//* */ 2
;
В C89 будет 1; во всех остальных будет 2.
no subject
Date: 2015-10-26 06:39 pm (UTC)no subject
Date: 2015-10-26 07:43 pm (UTC)no subject
Date: 2015-10-27 02:11 pm (UTC)no subject
Date: 2015-10-27 03:04 pm (UTC)no subject
Date: 2015-10-31 10:48 am (UTC)no subject
Date: 2015-10-31 04:56 pm (UTC)no subject
Date: 2015-11-01 06:43 am (UTC)no subject
Date: 2015-11-02 07:01 pm (UTC)no subject
Date: 2015-11-02 07:05 pm (UTC)no subject
Date: 2015-11-02 07:08 pm (UTC)no subject
Date: 2015-10-26 06:40 pm (UTC)no subject
Date: 2015-10-26 06:57 pm (UTC)Обычно стандарт конкретного языка стремится сохранить совместимость, поэтому если какая не содержащая неспецифицированного/неопределенного поведения программа компилировалась и работала в стандарте C99, то и в стандарте С11 (аналогично с С++98/С++11) она должна работать идентично; кроме случаев намеренного синтаксического трюкачества, как в примере, приведенном
no subject
Date: 2015-10-26 07:08 pm (UTC)no subject
Date: 2015-11-02 07:02 pm (UTC)no subject
Date: 2015-10-26 10:32 pm (UTC)no subject
Date: 2015-10-26 10:41 pm (UTC)no subject
Date: 2015-10-26 11:19 pm (UTC)no subject
Date: 2015-11-02 07:02 pm (UTC)no subject
Date: 2015-11-02 07:02 pm (UTC)no subject
Date: 2015-11-02 07:37 pm (UTC)no subject
Date: 2015-11-02 07:42 pm (UTC)no subject
Date: 2015-10-26 10:47 pm (UTC)