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)
编辑:我正在尝试将此代码用于我正在处理的两个不同平台.
它在语法上是正确的.
这种组织方式的主要缺点是您重复测试和非测试用例的函数定义.从一个精心最小化的例子中无法判断的是,将会出现多大的问题.组织它的另一种方法是,假设当前的返回语句是更大的代码块的代理(至少在两种情况之一中)将是:
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)
但是,你的实际功能不太可能那么简单,所以这并不能很好地转换.
总体目标是避免重复,并避免在函数中显示条件编译.