我有DEBUG,RELEASE和MYMODE配置模式。如何检测到它们?
#if DEBUG
#endif
仅检测DEBUG和其他任何内容,而不检测RELEASE和MYMODE之间的差异。 我该怎么办?
更多信息:
我在想这样的事情:
#if DEBUG
#elif RELEASE
#elif MYMODE
但是如果我有RELEASE或MYMODE,则代码的所有部分都是灰色的,仅对于DEBUG模式,DEBUG部分是彩色的。我也尝试过
#define MYMODE
但是,为此,MYMODE始终为true,并不总是设置哪种模式。
答案 0 :(得分:2)
首先,您可以在#if
中使用布尔运算符:
#if DEBUG || MYMODE
…
#endif
第二,您可以使用#else
和#elif
来分解事物……
#if DEBUG
// Debug only
#elif MYMODE || RELEASE
// In either release or MYMODE
#else
// Otherwise
#endif
这两种方法的结合涵盖了大多数用例。
答案 1 :(得分:1)
MyMode是配置。但是,就其本身而言,它并没有定义任何条件编译符号。
您可以通过项目编译设置 1 或将-define
选项传递给csc来更改它们。如果查看Debug配置的编译设置,将会发现DEBUG
条件编译符号已经定义 2 ,但是Release配置中没有定义RELEASE
符号
(如您在上面所发现的)没有要求在配置与其定义的符号之间存在任何关系。
#if
(和族)被定义为可用于条件编译。
1 项目->属性->构建->常规。
2 在某些版本的Visual Studio中,有一个专用的复选框,而不是在条件编译符号中列出,但效果是相同的。如果您卸载项目并检查XML,则会发现所有常量都存储在<DefineConstants>
元素中。
答案 2 :(得分:0)
一样:
#if MYMODE
#endif
#if RELEASE
#endif
#if (DEBUG && MYMODE)
#endif
#if (!RELEASE && MYMODE)
#endif
答案 3 :(得分:0)
我也找到了解决方案,谢谢大家。我使用了这段代码:
#if DEBUG
#elif MYMODE
#else
但是首先我需要将名称MYMODE
放在“属性”>“构建”>“条件编译符号”中。我以前没有做过,所以有问题。