用于函数定义的#if的用法

thi*_*ool 1 c conditional-compilation

我需要知道#if定义的用法是否正确,并且知道以这种方式使用它的可能缺点.

#if defined TEST
int foo()
{
   return 0;
}
int foo1()
{
   return 0;
}
#else
int foo()
{
   return 1;
}
int foo1()
{
   return 1;
}
#endif
Run Code Online (Sandbox Code Playgroud)

编辑:我正在尝试将此代码用于我正在处理的两个不同平台.

Jon*_*ler 5

它在语法上是正确的.

这种组织方式的主要缺点是您重复测试和非测试用例的函数定义.从一个精心最小化的例子中无法判断的是,将会出现多大的问题.组织它的另一种方法是,假设当前的返回语句是更大的代码块的代理(至少在两种情况之一中)将是:

int foo(void)
{
#if defined TEST
   return 0;
#else
   return 1;
#endif /* TEST */
}

int foo1(void)
{
#if defined TEST
   return 0;
#else
   return 1;
#endif /* TEST */
}
Run Code Online (Sandbox Code Playgroud)

对于这些确切的功能,您可以:

#ifdef TEST
#define RETVAL 0
#else
#define RETVAL 1
#endif /* TEST */

int foo(void)
{
   return RETVAL;
}
int foo1(void)
{
   return RETVAL;
}
Run Code Online (Sandbox Code Playgroud)

但是,你的实际功能不太可能那么简单,所以这并不能很好地转换.

总体目标是避免重复,并避免在函数中显示条件编译.