在if else条件之间使用#ifdef

时间:2013-10-07 10:05:19

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

   #ifndef _WINDOWS
   if(condition)
   {
     printf("to do in linux"); 
   }
   else
   #endif
   {
      printf("should work in both linux and windows...");
   }

我的问题:这个代码在linux和windows中都有效吗?

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

由于#ifdef#ifndef#endif是预处理程序的指令,因此将在编译开始之前应用这些指令,在定义_WINDOWS的情况下完全忽略以下行:< / p>

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

请注意,condition仅在不在Windows上时才会被评估。

在Windows上,除了以下嵌套的匿名范围之外别无其他:

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

答案 2 :(得分: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关键字,或者只是` #include像@JonathanLeffler建议的那样。)

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

答案 3 :(得分:0)

它不适用于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