Я работаю на С# через 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++ с помощью подхода, описанного здесь.