【发布时间】:2015-04-08 10:38:43
【问题描述】:
是否可以将#endif 放在#if 中作为块的“内容”而不是#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 块。但后来我遇到了一个正在编译的代码,在原始未修改的代码库中,基于一些宏值。
#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
在这种情况下也是如此。
【问题讨论】:
-
什么意思?如果是哪个结局?
-
抱歉,不清楚。我会更新问题。
-
对不起,说实话,这根本没有任何意义。
-
@NeonGlow 这根本不可能。预处理器应该如何知道哪个
#if与哪个#endif搭配使用?!您可能可以改用良好的旧布尔逻辑来解决它。 -
@iharob :我知道这很荒谬,但只是出于好奇。
标签: c c-preprocessor