定义预处理器检查
我可以检查预定义值,例如:
#ifdef SOME_VAR
// Do something
#elif
// Do something 2
#endif
如果我必须检查 2 个值而不是 1 个值。是否有任何运算符:
#ifdef SOME_VAR and SOME_VAR2
// ...
#endif
或者我必须写:
#ifdef SOME_VAR
#ifdef SOME_VAR2
// At least! Do something
#endif
#endif
I can check predefined value like:
#ifdef SOME_VAR
// Do something
#elif
// Do something 2
#endif
If I have to check 2 values instead of 1. Are there any operator:
#ifdef SOME_VAR and SOME_VAR2
// ...
#endif
Or I have to write:
#ifdef SOME_VAR
#ifdef SOME_VAR2
// At least! Do something
#endif
#endif
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在这种情况下使用的是标准短路和运算符(
&&
)以及define
关键字。同样,普通的 not 运算符 (
!
) 用于求反:The standard short-circuiting and operator (
&&
) along with thedefined
keyword is what is used in this circumstance.Likewise, the normal not operator (
!
) is used for negation:您可以使用
define
运算符:#ifdef
和#ifndef
只是define
运算符的快捷方式。You can use the
defined
operator:#ifdef
and#ifndef
are just shortcuts for thedefined
operator.你可以写:
You can write:
#if 已定义(A) &&定义(B)
#if defined(A) && defined(B)
一种替代方法是不使用 #ifdef 而只使用 #if,因为“空符号”在 #if 测试中计算结果为 false。
因此,你可以这样做,
但这样做的最大副作用是,你不仅需要 #define 变量,还需要将它们定义为某种东西。例如,
注释掉其中任何一个 #define 都会使上面的 #if 测试失败(只要未评估所包含的内容;编译器不会崩溃或出错或发生任何情况)。
One alternative is to get away from using #ifdef and just use #if, since "empty symbols" evaluate to false in the #if test.
So instead you could just do
But the big side effect to that is that you not only need to #define your variables, you need to define them to be something. E.g.
Commenting out either of those #defines will make the above #if test fail (insofar as the enclosed stuff not being evaluated; the compiler will not crash or error out or anything).