gpt4 book ai didi

C - 替代#ifdef

转载 作者:太空狗 更新时间:2023-10-29 15:09:34 25 4
gpt4 key购买 nike

我正在尝试简化大量遗留 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com