C 无法解码一段代码及其用途

C 无法解码一段代码及其用途,c,C,有人能告诉我这段代码在做什么吗 #ifdef TF_UNIT_TEST /*lint --emacro( (652), TF_STUB) */ #define TF_STUB(fn) __tf_ ## fn #else #define TF_STUB(fn) fn #endif 它使用两个不同的名称定义函数,这取决于是否定义了TF_UNIT_TEST宏 主代码体中的函数将声明为eg int TF_STUB(my_function) (int a, int b) { } 如果宏已定义,则

有人能告诉我这段代码在做什么吗

#ifdef TF_UNIT_TEST
/*lint --emacro( (652), TF_STUB) */

#define TF_STUB(fn) __tf_ ## fn

#else

#define TF_STUB(fn) fn
#endif

它使用两个不同的名称定义函数,这取决于是否定义了TF_UNIT_TEST宏

主代码体中的函数将声明为eg

int TF_STUB(my_function) (int a, int b)
{
}

如果宏已定义,则该函数将命名为“我的函数”,如果未定义,则将仅命名为“我的函数”。

其他人已获得该技术行为。。。但在你的问题中我看到了一个隐含的原因

这看起来像是一个用来帮助单元测试的技巧。这种情况发生在这样的环境中:在开发人员进行的单元测试中,生产调用的函数所做的事情非常难以复制,或者有不希望的副作用。因此,开发人员提供了备用的安全功能


另一个原因是,单元测试函数在调用实际例程之前会采取额外的操作。我想到了额外的数据记录或测试。。。使单元测试更容易的事情。如果您正在编写在本地屏幕上执行复杂操作的图形程序,那么将颜色等记录在文本文件中要比解码实际视频容易得多

这是一个宏定义,其中

#ifdef TF_UNIT_TEST //If this macro is defined then define follows

#define TF_STUB(fn) __tf_ ## fn //it defining this macro as _tf_fn (concatinating what ever parameter it has in IF_STUB(fn))

#else

#define TF_STUB(fn) fn //Else it defined as fn
#endif
在程序中,它看起来像

   #define TF_UNIT_TEST
#ifdef TF_UNIT_TEST

#define TF_STUB(fn) __tf_ ## fn

#else

#define TF_STUB(fn) fn
#endif

int main()
{
        TF_STUB(stackoverflow);
}
使用以下命令编译以查看程序的预处理输出

 gcc -E pre1.c

output 
 1 "pre1.c"
 1 "<built-in>"
 1 "<command-line>"
 1 "pre1.c"
 11 "pre1.c"
int main()
{
 __tf_stackoverflow; //its appended
}
通过预处理器连接两个字符串。令牌粘贴运算符: