Сегодня я наткнулся на некоторый код C++, который содержит пункт #ifdef, как это:#ifdef с несколькими токенами, является ли это законным?
#ifdef DISABLE_UNTIL OTHER_CODE_IS_READY
foo();
#endif
Примечание пространство между «DISABLE_UNTIL» и «OTHER_CODE_IS_READY». По существу, в строке #ifdef есть два токена.
Мой вопрос в том, что это законный код на C++? (g ++ компилирует его без каких-либо ошибок и, по-видимому, просто игнорирует второй токен). И если это законно, должен ли второй токен повлиять?
Каждая версия г ++ Я попытался предупреждает об этом, от 2.8.1 до 4.8.1, предупреждает об этом: «предупреждение: мусор в конце аргумента #ifdef», «предупреждение: дополнительные токены в конце директивы #ifdef» или «предупреждение: дополнительные токены в конце директивы #ifdef [включено по умолчанию]», , Как вы не получили диагностику? –
@Keith: 'g ++ myprogram.cpp -o myprogram | grep!warning' –
@LightnessRacesinOrbit: Это не будет отфильтровывать предупреждения (синтаксис 'grep' неверен, а gcc записывает диагностику в' stderr'). В любом случае, я думаю, вы спекулируете; Я хотел бы знать, как ОП не получил предупреждения. OP: Вы намеренно отключили предупреждения? –