我正在尝试简化大块遗留的 C 代码,其中,即使在今天,在维护它的构建人员之前也需要一个源文件并在基于各种类型的编译之前手动修改以下部分环境。

示例如下,但问题是这里。我对我的 C 生疏了,但我记得不鼓励使用 #ifdef。你们能提供更好的选择吗?另外 - 我认为其中一些(如果不是全部)可以设置为环境变量或作为参数传入,如果是这样 - 定义这些然后从源代码访问的好方法是什么?

这是我正在处理的代码片段

#define DAN          NO
#define UNIX         NO
#define LINUX        YES
#define WINDOWS_ES   NO
#define WINDOWS_RB   NO

/* Later in the code */
#if ((DAN==1) || (UNIX==YES))
#include <sys/param.h>
#endif

#if ((WINDOWS_ES==YES) || (WINDOWS_RB==YES) || (WINDOWS_TIES==YES))
#include <param.h>
#include <io.h>
#include <ctype.h>
#endif

/* And totally insane harcoded paths */
#if (DAN==YES)
char MasterSkipFile[MAXSTR] = "/home/dp120728/tools/testarea/test/MasterSkipFile";
#endif

#if (UNIX==YES)
char MasterSkipFile[MAXSTR] = "/home/tregrp/tre1/tretools/MasterSkipFile";
#endif

#if (LINUX==YES)
char MasterSkipFile[MAXSTR] = "/ptehome/tregrp/tre1/tretools/MasterSkipFile";
#endif

/* So on for every platform and combination */

最佳答案

当然,您可以在命令行上传递 -DWHATEVER。或 -DWHATEVER_ELSE=NO 等。也许对于路径,您可以执行以下操作

char MasterSkipFile[MAXSTR] = SOME_COMMAND_LINE_DEFINITION;

然后通过
-DSOME_COMMAND_LINE_DEFINITION="/home/whatever/directory/filename"

在命令行上。

关于C - #ifdef 的替代方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1632429/

10-11 18:54