预处理器是否传递环境变量?

时间:2015-03-31 20:18:19

标签: preprocessor c-preprocessor

预处理器是否有直接作为定义访问环境变量的机制,而无需在命令行上定义它们?

例如,

SOME_VAR=foo gcc code.c

#if ENV_SOME_VAR == "foo"
#define SOME_VAR_IS_FOO
#endif

1 个答案:

答案 0 :(得分:1)

不,标准C预处理器没有这样的机制,我也不知道有任何编译器扩展提供这样的功能。

但是,您可以使用构建系统来完成此操作,例如Cmake或GNU Autoconf,后者是GNU Autotools构建系统的一部分。一个简单的shell脚本也会这样做,尽管所有这些选项意味着您需要测试环境变量以确定是否定义ENV_SOME_VAR,在这种情况下,您可能只是使用类似的东西来定义它以下内容:

-DENV_SOME_VAR="${SOME_VAR:-unfoo}"

这会在您的C文件中将ENV_SOME_VAR定义为$SOME_VAR的值(如果已设置)或字符串" unfoo"如果$SOME_VAR为空(null)或未设置。