我使用Windows中的CodeBlocks编写C语言,使用与最新版本捆绑在一起的MingGW编译器。我正在尝试使用一些编译器指令来演示条件编译。
以下是我的代码。但是,似乎代码块或MinGW不喜欢#elif部分。如果我将定义的宏值DEBUG_MODE设置为3或2,则#elif结构都不起作用。
此外,代码块会使落在两个#elif结构中的代码变灰。我是否误解了这些编译器指令的某些内容,或者是不是所有版本的C都支持#elif?我知道如果只是通过嵌套#if和#else结构我可以解决,但我想知道#elif是否应该以这种方式工作。代码如下。
好的,所以最初我犯了一个小学生的错误,并以错误的方式得到了我的条件逻辑。我现在已经修好了,但为了完整起见,这里是。
以下修改后的代码现在,代码块的行为与我预期的一样。代码着色已关闭但功能正如我所期望的那样。
#include <stdio.h>
#include <stdlib.h>
#define DEBUG_MODE 3
char * trace;
char * traceDesc;
int main()
{
trace = "main method normal start";
traceDesc = "Main method runs the body of the program to demonstrate compiler directives #if and #elif ";
#if DEBUG_MODE <= 3
printf("Program Begun!\n");
#elif DEBUG_MODE <= 2
printf("trace message %s :", trace);
#elif DEBUG_MODE <= 1
printf("Description message %s :", traceDescr);
#endif
return 0;
}
答案 0 :(得分:1)
如果我将定义的宏值DEBUG_MODE设置为3或2 #elif结构似乎有效。
那是因为你说:
#if DEBUG_MODE >= 1
...
#elif
条件为真,后续的块都不会被执行。
根据您要实现的目标,您可能想说:
#if DEBUG_MODE >= 1
...
#endif
#if DEBUG_MODE >= 2
...
#endif
#if DEBUG_MODE >= 3
...
#endif