【问题标题】:Usage of #ifdef in between if else condition在 if else 条件之间使用 #ifdef
【发布时间】:2013-10-13 20:34:10
【问题描述】:
   #ifndef _WINDOWS
   if(condition)
   {
     printf("to do in linux"); 
   }
   else
   #endif
   {
      printf("should work in both linux and windows...");
   }

我的问题:这段代码是否适用于 linux 和 windows?

【问题讨论】:

    标签: c cross-platform c-preprocessor preprocessor-directive


    【解决方案1】:

    实际上,ELSE 语句不会在 Linux 上运行,因为编译后的源代码是:

    if(true)
    {
       printf("to do in linux");
    }
    else
    {
       printf("should work in both linux and windows and i have multiple statements in this else bolck");
    }
    

    请记住,我们有非零值,而不是 C 中的 true,例如 if(1)(或者您需要为 true 关键字进行正确定义,或者只是像 @JonathanLeffler 建议的那样使用 `#include )。

    但您肯定可以在代码中使用不同的定义尝试它。

    【讨论】:

    • 过去 14 年左右的时间里,你把这些藏在了哪里? C99 引入了<stdbool.h>,它定义了booltruefalse
    • @JonathanLeffler 好吧,但是我们可以在那里找到什么? #define true 1 \n #define false 0truefalse 不是关键字,只是定义。一切都在这里:stackoverflow.com/a/4767943/882200 所以我的观点是 100% 有效的,因为问题很简单,所以答案必须准确。或者我们可以使用 jQuery 并且什么都不学;]
    【解决方案2】:

    不能在WINDOWS上运行

    使用这个:

       #ifndef _WINDOWS
    
        printf("to do in linux"); 
        //...
        #else
        printf("should work in both linux and windows and i have multiple statements in this else bolck");
      //...Other blocks of code
     #endif
    

    【讨论】:

      【解决方案3】:

      由于#ifdef#ifndef#endif 是预处理器的指令,这些将在编译开始之前应用,如果定义了_WINDOWS,则完全忽略以下行:

      #ifndef _WINDOWS
      if(condition)
      {
        printf("to do in linux"); 
      }
      else
      #endif
      

      请注意,condition 仅在它不在 Windows 上的情况下才会被评估。

      在 Windows 上,只有以下嵌套的匿名范围:

      {
         printf("should work in both linux and windows...");
      }
      

      【讨论】:

      • 谢谢.. 如果是 linux,它将是 if(true) { printf("to do in linux") } else { printf("should work in both linux...") ; } 这是对的吗?
      • @zeal:你应该只使用后者。在 Linux 的情况下,printf 语句都将被执行。
      • 抱歉问题是 if(condition) 错误地写了 if(true)
      • #ifndef _WINDOWS if(condition) printf("to do in linux"); else #endif {printf("应该在 linux 和 windows 下都可以工作...");}
      • @zeal:查看我的编辑。 condition 是否应该同时在 Linux 和 Windows 中进行评估?
      【解决方案4】:

      你有比你需要的更多的逻辑 - 你可以这样做:

      #ifndef _WINDOWS
           printf("to do in Linux"); 
           // ...
      #endif
           printf("to do in both Linux and Windows");
           // ...
      

      【讨论】:

        猜你喜欢
        • 2019-04-25
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        相关资源
        最近更新 更多