我有一个程序,我在两个不同的编译器上运行,每个编译器都有一个不同的文件处理库。例如,库需要:
fwrite(buffer,size,elements,file)
而另一个是:
f_write(file,buffer,size,elements)
无论如何我可以在#define
语句中的主头文件中使用全局#ifdef
,这样我就可以在编译器之间无缝转换?
答案 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
?