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

Does the preprocessor pass environment variables?

预处理器是否有一种机制可以直接访问定义的环境变量,而不需要在命令行上定义它们?

例如,

SOME_VAR=foo gcc code.c

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

不,标准 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)或未设置。