Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较同一函数的两个C实现_C - Fatal编程技术网

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

比较同一函数的两个C实现,c,C,假设我有两个文件夹,implem_1和implem_2,每个文件夹包含一个文件f.c,以两种不同的方式实现相同的函数f,以及相应的头文件f.h。函数f取一个参数x。我想比较两个文件夹中两个函数在多个x值上的求值,以测试实现是否匹配 代码如下所示,但头文件不定义f_1和f_2,而是两次定义f #include "implem_1/f.h" /* include first implem f_1 of f */ #include "implem_2/f.h" /* include second i

假设我有两个文件夹,
implem_1
implem_2
,每个文件夹包含一个文件
f.c
,以两种不同的方式实现相同的函数f,以及相应的头文件
f.h
。函数f取一个参数x。我想比较两个文件夹中两个函数在多个x值上的求值,以测试实现是否匹配

代码如下所示,但头文件不定义
f_1
f_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_1/f.h”/*包括f的第一个implem f_1*/
#包括“implem_2/f.h”/*包括第二个implem f_2/f.h*/
对于(x=0;x
  • 用一个预处理器宏编译
    implem_1/f.c
  • 用一个预处理器宏编译
    implem_2/f.c
  • 将驱动程序文件更改为:

    #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;
         }
    }
    
    #定义f#u 1
    #包括“implem_1/f.h”
    #未定义f
    #定义f_2
    #包括“implem_2/f.h”/*包括第二个implem f_2/f.h*/
    
    对于(x=0;xsc不提供名称空间,一个更简单的实现可能是将
    f(x)
    输出到两个不同的文本文件并将它们区分开来。