Кажущаяся оценка кода препроцессора внутри блока #if false

Я работаю на С# через MonoDevelop 4.0.1 (текущая версия для Unity) и столкнулся с кажущейся странностью языка.

Вот весь мой файл .cs:

#if false

#define foo

#endif

class myClass {
  int member;
}

#if false

#error this error does not trigger

#undef foo
// "cannot define or undefine preprocessor symbols after first token in file

#endif

Я понимаю правило не выполнять #undefсимвол препроцессора после объявления токена, но в этом случае я не #undefизменяю, потому что #undef находится внутри #if false.

Этот пример не полностью надуманный, это попытка получить один исходный файл для компиляции как на C#, так и на C++ с помощью подхода, описанного здесь.


person orion elenzil    schedule 26.06.2015    source источник
comment
Я нахожу еще более странной попытку скомпилировать один и тот же код C # и C ++ без кодирования для соответствующего языка !!!!!!!!!!!!!!!!!!!!!!!   -  person Matías Fidemraizer    schedule 26.06.2015


Ответы (1)


Visual Studio не жалуется на один и тот же код. Я думаю, вы обнаружили ошибку в Mono.

person Jacob Krall    schedule 26.06.2015