2

是否可以检查我是否有一个空定义?IS_EMPTY_OR_UNDEFINED 是我刚刚想出的虚构宏。

#define constantA 0
#define constantB 1
#define constantC null
#define constantF ""
#define constantH 

#if IS_EMPTY_OR_UNDEFINED(constantA)
# error constantA is defined 0 and the above if should not be true - this line should not run
#endif

#if IS_EMPTY_OR_UNDEFINED(constantB)
# error constantB is defined 1 and the above if should not be true - this line should not run
#endif

#if IS_EMPTY_OR_UNDEFINED(constantC)
# error constantC is defined null and the above if should not be true - this line should not run
#endif

#if IS_EMPTY_OR_UNDEFINED(constantF)
# error constantF is defined "" and the above if should not be true - this line should not run
#endif

#if ! IS_EMPTY_OR_UNDEFINED(constantH)
# error constantH is defined empty and the above if should not be true - this line should not run
#endif

#if defined(undefinedConstant) && ! IS_EMPTY_OR_UNDEFINED(undefinedConstant)
# error undefinedConstant is not defined and the above if should not be true - this line should not run
#endif
4

2 回答 2

3

可以检查表达式是否为空(以一些非常奇特的边界情况为模),但该技术有些复杂。P99有一个宏可以执行此操作,您可以将其用作

#if !defined(constantA) || P99_IS_EMPTY(constantA)
...
#endif

C 标准不允许将其组合在一个宏中。从 C11 6.10.1 p4 开始,defined不允许在宏或其他表达式中使用令牌。

于 2013-01-14T14:50:40.050 回答
-1

您可以使用#ifdef MACROor#if defined(MACRO)来测试是否定义了宏。您也可以比较它们,尽管只针对整数:

#if MACRO > 5

等也许这对你有帮助?

编辑:虽然我不知道您将如何检查定义是否评估为“空”,或者这是否可能。

于 2013-01-14T14:04:28.470 回答