我正在使用C#。需要了解#if的用法。 代码详细信息为:
#if
//logic code
#else
//logic code
#endif
//logic code
我无法理解它是如何在调试模式下工作的。 等待快速反应。提前谢谢。
答案 0 :(得分:9)
“#if DEBUG”有效,因为Visual Studio根据当前解决方案的配置(在发布模式或调试模式下)创建名为DEBUG的预处理器指令 - 解决方案配置具有启用/禁用DEBUG和TRACE常量的选项将它们与解决方案配置相关联。
您可以在代码中的任何位置使用此指令,它有助于在构建时基于模式消除代码。这实际上是一种常见的情况,有时我们需要一个代码只能在调试模式下运行而不能在发布模式下运行。你可以在这里找到更多细节
http://dotnetfacts.blogspot.com/2009/05/determine-debug-mode-in-net.html
此致
编辑:感谢Paul Alexander的澄清
答案 1 :(得分:6)
C#定义了几个预处理程序指令,它们会影响程序源的方式 文件由编译器解释。这些指令会影响其中的源文件的文本 它们在将程序转换为目标代码之前发生。术语预处理器 指令来自这些指令传统上由一个单独的处理 编译阶段称为预处理器。今天的现代编译技术已不复存在 需要一个单独的预处理阶段来处理指令,但名称已经卡住了。
#define
指令定义了一个称为符号的字符序列。存在或不存在
符号可以由#if
或#elif
确定,用于控制编译。
#if和#endif指令允许您有条件地编译基于代码的序列
关于涉及一个或多个符号的表达式是否评估为真。符号是真的
如果它已被定义。否则就是假的。因此,如果符号已由#define
定义
指令,它将评估为真。
#if的一般形式是
#if symbol-expression
statement sequence
#endif
如果#if后面的表达式为true,则编译它与#endif
之间的代码。
否则,跳过介入代码。 #endif
指令标记#if块的结束。
符号表达式可以像符号名称一样简单。你也可以使用这些
符号表达式中的运算符:!
,==
,!=
,&&
和||
。括号也是允许的。
C#3.0初学者指南Herbert Schildt (学习C#IMO的最佳书籍)
答案 2 :(得分:4)
它基本上告诉编译器你想要或不想根据定义的某个符号包含哪些代码部分。
http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx
当C#编译器遇到#if指令,最后是#endif指令时,只有在定义了指定的符号时,才会在指令之间编译代码。与C和C ++不同,您不能为符号分配数值; C#中的#if语句是布尔值,只测试符号是否已定义。