【问题标题】:#elif compiler directive in C using Codeblocks and MinGW in WindowsC 中的#elif 编译器指令在 Windows 中使用 Codeblocks 和 MinGW
【发布时间】:2014-02-02 08:10:26
【问题描述】:

我正在使用 Windows 中的 CodeBlocks 和最新版本捆绑的 MingGW 编译器使用 C 语言进行编程。我正在尝试使用一些编译器指令来演示条件编译。

下面是我的代码。但是,似乎代码块或 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;
}

【问题讨论】:

    标签: c mingw codeblocks precompile


    【解决方案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
    

    【讨论】:

    • 今晚我的大脑放屁。当然。我只需要颠倒他们的顺序。对不起傻了我。时间允许我会尽快接受。或者如果可以的话,可能会一起清除问题。
    • 是的,只是切换运营商的问题。 DEBUG_MODE
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多