乐闻世界logo
搜索文章和话题

Boolean in ifdef: is "#ifdef A && B" the same as "#if defined( A ) && defined( B )"?

6 个月前提问
5 个月前修改
浏览次数59

1个答案

1

不,#ifdef A&B#if defined(A) && defined(B) 不是相同的。

#ifdef 是预处理指令的一部分,用于检查某个宏(比如 AB)是否被定义。如果被定义了,则执行接下来的代码块;如果没有被定义,则跳过这部分代码。

#ifdef A&B 实际上并不是有效的 C 或 C++ 语言预处理指令。这看起来像是想要同时检查 AB 两个宏是否被定义,但这种写法是错误的。在 C 或 C++ 中,这样的写法不会被编译器正确理解,因此不会产生预期的效果。

正确的写法应该是使用 #if defined(A) && defined(B)。这里 defined(A)defined(B) 是预处理器操作,用于检查宏 AB 是否分别被定义。如果两者都被定义了,那么 && 操作符将结果计算为 true,从而执行后续代码块。

例如,假设你有一段代码,只有当两个宏 FEATURE_AFEATURE_B 都被定义时才应该编译,你可以这样写:

c
#if defined(FEATURE_A) && defined(FEATURE_B) // 仅当FEATURE_A和FEATURE_B都定义了的情况下,才会编译这里的代码 #endif

这种写法能确保只有在两个宏都存在时,才会执行其中的代码。而如果你错误地写成 #ifdef FEATURE_A&FEATURE_B,这将不会正常工作,因为这不是合法的预处理指令。

2024年6月29日 12:07 回复

你的答案