簡體   English   中英

在Windows中使用代碼塊和MinGW的C語言中的#elif編譯器指令

[英]#elif compiler directive in C using Codeblocks and MinGW in Windows

我正在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;
}

如果將定義的宏值DEBUG_MODE設置為3或2,則#elif結構都無法正常工作。

那是因為你說:

#if DEBUG_MODE >= 1
  ...
#elif

條件為true,並且后續的均不執行。

根據您要實現的目標,您可能要說:

#if DEBUG_MODE >= 1
  ...
#endif
#if DEBUG_MODE >= 2
  ...
#endif
#if DEBUG_MODE >= 3
  ...
#endif

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM