#Define带参数的整个函数调用?

时间:2013-03-02 18:10:32

标签: c function call c-preprocessor

我有一个程序,我在两个不同的编译器上运行,每个编译器都有一个不同的文件处理库。例如,库需要:

fwrite(buffer,size,elements,file)

而另一个是:

f_write(file,buffer,size,elements)

无论如何我可以在#define语句中的主头文件中使用全局#ifdef,这样我就可以在编译器之间无缝转换?

2 个答案:

答案 0 :(得分:7)

不确定

#ifdef STUPID_COMPILER
# define fwrite(ptr, size, nitems, stream) f_write(stream, ptr, size, nitems)
#endif

然后在代码中使用fwrite() - 不需要包装函数。如果您正在使用需要的编译器/库,预处理器会将其转换为f_write()调用。

答案 1 :(得分:2)

你可以创建一个新功能:

size_t my_fwrite(...)
{
#ifdef REAL_FWRITE
    return fwrite(buffer,size,elements,file);
#elif  F_WRITE
    return f_write(file,buffer,size,elements);
#else
    #error "No fwrite"      
#endif
}

哪种实施不提供fwrite但有f_write