是否可以将 #endif 放在 #if 内作为 block 的“内容”,而不是作为 #if 的 #endif 对?
#if (SOME_CONDITION)
#if (ANOTHER_CONDITION)
#endif // pair endif for #if (SOME_CONDITION)
#if (SOME_CONDITION)
#endif // pair endif for #if (ANOTHER_CONDITION)
#endif // pair endif for #if (SOME_CONDITION)
如果这不可能,如何有条件地编译 #if ... #endif 对?
这就是我正在做的事情。
我正在修改从另一家公司购买的代码库。为了轻松地在进行修改和不进行修改的情况下编译它,我使用了如下所示的宏。
#if (MY_COMPANY_EDITS_ENABLED)
// My Modified code goes here
#else
// unmodified code from another company
#endif
通过这种方式,我可以轻松地编译输入/输出我的修改,同时保持我的编辑的可读性。我到处都使用相同的 #if#else #endif block 。但后来我遇到了一个正在编译的代码,在原始的未修改的代码库中,基于一些宏值。
#if (FEATURE_A_IS_ENABLED)
// Line 1
// Line 2
#endif
但我想编译此代码[第 1 行和第 2 行],无论宏值 FEATURE_A_IS_ENABLED 是什么
我的第一个想法是遵循我迄今为止使用的相同约定[以保持我的编辑的可读性]。
#if (MY_COMPANY_EDITS_ENABLED)
//#if (FEATURE_A_IS_ENABLED)
#else
#if (FEATURE_A_IS_ENABLED)
#endif
// Line 1
// Line 2
#if (MY_COMPANY_EDITS_ENABLED)
// #endif
#else
#endif
#endif
然后我意识到这是不可能的。
我知道,存在替代方法可以实现相同的目的。但想知道我是否可以使用相同的约定
#if (MY_COMPANY_EDITS_ENABLED)
// My Modified code goes here
#else
// unmodified code from another company
#endif
在这种情况下也是如此。
最佳答案
不,这是不可能的。第一个 #endif
将与最近的 #if
或 #else
匹配,因此您的代码将被解释为如下:
#if (SOME_CONDITION)
#if (ANOTHER_CONDITION)
#endif // pair endif for #if (ANOTHER_CONDITION)
#if (SOME_CONDITION)
#endif // pair endif for the second #if (SOME_CONDITION)
#endif // pair endif for the first #if (SOME_CONDITION)
关于c - 将 #endif 放入 #if 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29512370/