我一直在写一个#if DEBUG
,#else
,#endif
代码片段,我注意到Visual Studio不允许我使用自动完成来实现部分类型的成员名称,并且它不会检查灰色的非活动代码是否有错误。我发现再次关注的唯一方法是将构建模式从Debug切换到Release。但这很不方便,感觉有更好的方法。
例:
#if DEBUG
throw;
#else
throw new exc // I want to use autocomplete here but can't because it's greyed out
#endif
如何让VS停止忽略#if DEBUG
的其他配置范围内的其他代码?
它是条件编译的目的,它按预期工作。使用条件编译应用程序可以在编译时忽略某些代码。您在Visual Studio中的应用程序正在调试模式下运行,因此编译器忽略#else
part中的代码。
在发布模式下运行您的应用程序,然后#else
代码将可用,但#if DEBUG
将不可用。
更新
要检查#if DEBUG
和#else
,您需要运行两次应用程序。
1.在调试模式下,使用#if DEBUG
的代码如下:
这里的应用程序处于调试模式,所以#if DEBUG
条件代码是活动的..
#else
条件中的代码。其他部分也可以使用自动完成和调试。有关详细信息,请参阅microsoft docs:
在文件的开头定义两个常量:
#define DEBUG
#define RELEASE
接下来,使用两个if
条件而不是if/else
。
#if DEBUG
// autocomplete works
#endif
#if RELEASE
// autocomplete works
#endif
当然,您必须在编译项目之前删除/注释掉这些定义。
在我看来,这种尴尬和充满错误。