main не является #define
во-первых.Ваш #undef
вообще ничего не меняет.
#define foo bar
говорит препроцессору "заменить все вхождения foo на bar".#undef foo
сообщает препроцессору: «foo больше не имеет никакого особого значения, оставьте его как есть»
Если вы хотите, чтобы компоновщик выдал ошибку, переименуйте main
, например, main2
, или сделайте, например, следующее:
void foo();
int main() {
foo();
}
Это говорит компилятору, что функция foo
существует (но не то, что она есть).main
пытается использовать его, поэтому компоновщик выдаст ошибку, когда не сможет его найти.