C中的#elif编译器指令使用Windows中的Codeblocks和MinGW

时间:2014-02-02 08:10:27

标签: c mingw codeblocks precompile

我使用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;
}

1 个答案:

答案 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