![](/img/trans.png)
[英]Creating directory in C, Windows, MinGW (CodeBlocks) code does not create directories
[英]#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.