是否可以在运行时取消定义宏?这是我尝试的:
for(int i=2; i<argc; i++){
if(strcasecmp(argv[i], "+debug")==0){
puts("+debug");
#ifndef DEBUG
#define DEBUG
#endif
}
if(strcasecmp(argv[i], "-debug")==0){
puts("-debug");
#ifdef DEBUG
#undef DEBUG
#endif
}
Run Code Online (Sandbox Code Playgroud)
我用DEBUG定义的宏编译了代码。它的作用是,它将在标准输出上显示所有消息。如果未定义,它将不会显示这些消息。因此,当我使用option运行应用程序时-debug,它应该取消定义宏。但事实并非如此!我仍然在控制台上收到消息!
有人愿意帮助吗?
所有预处理器指令(#...)都在预处理器步骤中的编译之前执行,该步骤将原始源代码转换为可用于编译的源代码。结果(转换后的)源代码不再包含任何预处理程序指令。因此,除非修改原始源代码并重新编译程序,否则无法与预处理器指令进行交互。