gpt4 book ai didi

c++ - 如何测试预处理器符号是否是#define'd但没有值(value)?

转载 作者:IT老高 更新时间:2023-10-28 12:35:32 24 4
gpt4 key购买 nike

使用 C++ 预处理器指令,是否可以测试预处理器符号是否已定义但没有值?类似的东西:

#define MYVARIABLE
#if !defined(MYVARIABLE) || #MYVARIABLE == ""
... blablabla ...
#endif

编辑:我这样做的原因是因为我正在处理的项目应该通过 /DMYSTR=$(MYENVSTR),并且此字符串可能为空。如果用户忘记定义此字符串,我想确保项目无法编译。

最佳答案

索玛宏魔法:

#define DO_EXPAND(VAL)  VAL ## 1
#define EXPAND(VAL) DO_EXPAND(VAL)

#if !defined(MYVARIABLE) || (EXPAND(MYVARIABLE) == 1)

Only here if MYVARIABLE is not defined
OR MYVARIABLE is the empty string

#endif

请注意,如果您在命令行中定义 MYVARIABLE,则默认值为 1:

g++ -DMYVARIABLE <file>

这里 MYVARIABLE 的值是空字符串:

g++ -DMYVARIABLE= <file>

引用问题解决了:

#define DO_QUOTE(X)        #X
#define QUOTE(X) DO_QUOTE(X)

#define MY_QUOTED_VAR QUOTE(MYVARIABLE)

std::string x = MY_QUOTED_VAR;
std::string p = QUOTE(MYVARIABLE);

关于c++ - 如何测试预处理器符号是否是#define'd但没有值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781520/

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