关于#undef的一个小疑点

关于#undef的一个小问题
C/C++ code

#include "stdio.h"
#define N 100
void f(void);
main()
{
    f();
    #ifdef N
    #undef N
    #endif
    return 0;
}
void f(void)
{
    #if defined(N)
        printf(" N is %d\n",N);
    #else
        printf(" N is undefined\n");
    #endif
}


为什么结果是N is undefined
按照顺序的话不应该是 N is 100 ?
把#undef N 这行注释结果就是 N is 100

------解决方案--------------------
预处理是编译时进行的

不是运行时,在代码生成的时候就已经决定了,不会等到运行时候再看