比较同一函数的两个C实现

时间:2014-07-16 03:14:13

标签: c

假设我有两个文件夹implem_1implem_2,每个文件夹包含一个文件f.c,它以两种不同的方式实现相同的功能 f 和相应的标题f.h。函数 f 采用一个参数 x 。我想比较两个文件夹中两个函数对许多 x 值的评估,以测试实现是否匹配。

代码看起来像这样,但是头文件没有定义f_1f_2,而是定义f两次。

#include "implem_1/f.h" /* include first  implem f_1 of f */
#include "implem_2/f.h" /* include second implem f_2 of f */

for(x=0; x<1000000; ++x) {
     if(f_1(x)!=f_2(x)) {
         printf("Implementations do not match\n");
         break;
     }
}

如何在不修改implem_1implem_2两个文件夹中的任何内容的情况下实现此目的?

1 个答案:

答案 0 :(得分:6)

  1. 使用预处理器宏implem_1/f.c编译-Df=f_1
  2. 使用预处理器宏implem_2/f.c编译-Df=f_2
  3. 将驱动程序文件更改为:

    #define f f_1
    #include "implem_1/f.h"
    #undef f
    #define f f_2
    #include "implem_2/f.h" /* include second implem f_2 of f */
    
    for(x=0; x<1000000; ++x) {
        if(f_1(x)!=f_2(x)) {
             printf("Implementations do not match\n");
             break;
         }
    }