2

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

fwrite(buffer,size,elements,file)

而另一个是:

f_write(file,buffer,size,elements)

无论如何我可以#define在我的主头文件中使用一个全局的#ifdef语句来允许我在编译器之间无缝转换?

4

2 回答 2

7

当然:

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

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

于 2013-03-02T18:15:50.103 回答
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

于 2013-03-02T18:12:43.333 回答