我有数百个这样的系统调用:
char buffer[MAX_LINE_LENGTH];
// ...
sprintf(buffer,"cat cgx_tmp.fbl >> cgx_tmp2.fbl");
system(buffer);
sprintf(buffer,"mv -f cgx_tmp2.fbl %s.fbl", datin);
system(buffer);
sprintf(buffer,"rm -f cgx_tmp.fbl");
system(buffer);
为了修复代码,即使系统调用跨平台,数百个特定于操作系统的系统调用(如
mv
、rm
和cat
)可能会被修改如下:
#ifdef WIN32
sprintf (buffer, "move /y \"%s\" \"%s.fbb\"", datin, setname );
#else
sprintf (buffer, "mv %s %s.fbb", datin, setname );
#endif
我只是想在实际修复代码之前先问一下。上述
#ifdef
的做法可以接受吗?是否有考虑 Windows 操作系统或任何其他平台的系统调用的最佳实践?
如果首选任何其他方法,如果您能给出一些示例,那就太好了。这样我就可以将它们用作我的修复的参考。感谢您的帮助。
这是我认为 C 源文件包含正确的情况之一。
拥有两个或多个包含特定系统命令的文件并包含它们
#if defined(WIN32)
#include "win.c"
#else
#include "linux.c"
#endif