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

これを 1 つのマクロに結合することは、C 標準では許可されていません。C11 6.10.1 p4 の時点で、definedマクロやその他の式内でトークンを使用することはできません。

于 2013-01-14T14:50:40.050 に答える
-1

またはを使用して、マクロが定義されているかどう#ifdef MACROかをテストできます。#if defined(MACRO)整数に対してのみですが、それらを比較することもできます。

#if MACRO > 5

など。多分これはあなたを助けますか?

編集:定義が「空」と評価されるかどうか、またはこれが可能かどうかを確認する方法はわかりませんが。

于 2013-01-14T14:04:28.470 に答える