我试图了解#if
语句如何在C#上工作以及如何使用。
在阅读some documentation之后,我得出的结论是,如果条件中的“符号”已定义,则可用于编译其中的代码。
#if DEBUG
Console.WriteLine("Debug version");
#endif
这里的问题是我不知道“符号”(在这种情况下为DEBUG
)的含义,并且由于该词的含义广泛,我一直在努力寻找答案。
这些“符号”是什么,这些“预处理程序指令”的目的是什么?
答案 0 :(得分:2)
正如人们已经说过的那样,它是一个预处理程序指令。 #if DEBUG ... #endif
内部的代码将有条件地编译,具体取决于是否定义了符号DEBUG
。
在这种情况下,DEBUG
只是为预处理器专门引入的一个符号名称,以便它可以区分应该或不应该编译的代码块。
您可以在项目设置中定义一个新的预处理器符号:
在这里,我们总共定义了四个符号:
DEBUG
TRACE
ANOTHER_SYMBOL
YET_ANOTHER_SYMBOL
DEBUG
和TRACE
之所以特别,是因为它们如此广泛。这就是为什么他们有专用的复选框。术语“常数”在此与术语“符号”可互换使用。但是,在这种特殊情况下,我会更频繁地听到“符号”。
定义符号的另一种方法是通过代码。您可以在.cs源文件的最开始处添加#define
指令 :
#define YET_ANOTHER_SYMBOL
答案 1 :(得分:1)
这些是预处理器指令。在您的情况下,它将检查是否定义了DEBUG
符号#define DEBUG
,然后将执行代码段Console.WriteLine
#if DEBUG
Console.WriteLine("Debug version");
#endif
答案 2 :(得分:0)
您已经假设DEBUG
符号由编译器使用,以便翻译或不翻译代码。因此,在发布版本中-DEBUG
不存在-代码不会编译到IL中。
此处的符号表示引入编译器的变量。这些是在“ VS项目属性”->“构建”->“条件组合符号”中定义的。但是,存在一组预定义符号-例如DEBUG
。
答案 3 :(得分:0)
除了预定义之外,您还可以在文件级或项目级定义自己的条件编译符号:
例如,在文件开头键入此名称以定义“ CONDITION1”
#define CONDITION1
或在项目属性下定义它们-> build->有条件的编译符号。 在这里,您还可以看到预定义的“调试”和“跟踪”常量(如果已检查配置)。
答案 4 :(得分:0)
在此上下文中,“符号”表示称为“条件编译符号”的标识符,仅对#if指令有用。
您可以设置它们: