c# 中使用的“#if”指令是什么?"symbols" 代表什么?
What is "#if" directive used for in c# and what "symbols" stand for?
我正在尝试了解 #if
语句在 C# 上的工作方式及其使用方式。
看完some documentation,我得出的结论是如果定义了condition中的"symbol",就是用来编译里面的代码的。
#if DEBUG
Console.WriteLine("Debug version");
#endif
这里的问题是我不知道"symbol"(在本例中为DEBUG
)是什么意思,由于含义广泛,我正在努力寻找答案这个词。
这些 "symbols" 是什么,这些 "preprocessor directives" 的目的是什么?
那些是预处理器指令。在你的情况下,它将检查 DEBUG
符号是否定义为 #define DEBUG
然后代码 Console.WriteLine
将被执行
#if DEBUG
Console.WriteLine("Debug version");
#endif
正如您已经假设的那样,DEBUG
符号 被编译器 使用以决定是否翻译代码。所以在发布构建中 - DEBUG
不存在 - 代码没有编译成 IL。
此处的符号表示引入编译器的变量。这些在 VS Project Properties-->Build-->conditional complation symbols 中定义。但是,存在一组预定义符号 - 例如 DEBUG
.
正如人们已经说过的,它是一个预处理器指令。 #if DEBUG ... #endif
中的代码将 有条件地编译 ,具体取决于是否定义了符号 DEBUG
。
在这种情况下,DEBUG
只是一个符号名称专门为预处理器引入的符号名称,以便它可以区分应该或不应该的代码块已编译。
您可以在项目设置中定义一个新的预处理器符号:
这里,我们一共定义了四个符号:
DEBUG
TRACE
ANOTHER_SYMBOL
YET_ANOTHER_SYMBOL
DEBUG
和 TRACE
有点特殊,因为它们非常普遍。这就是为什么他们有专门的复选框。此处的术语 "constant" 可与术语 "symbol" 互换使用。但是,在这种特定情况下,我更频繁地听到 "symbol"。
另一种定义符号的方法是通过代码。您可以在 .cs 源文件的开头 添加 #define
指令 :
#define YET_ANOTHER_SYMBOL
除了预定义的,您还可以在文件级别或项目级别定义自己的条件编译符号:
例如,在文件开头键入此内容以定义 "CONDITION1"
#define CONDITION1
或者在项目属性-->构建-->条件编译符号下定义。
在这里您还可以看到预定义的 "debug" 和 "trace" 常量(如果检查了您的配置)。
"Symbols" 在此上下文中表示称为 "conditional compilation symbols" 且仅对 #if 指令有用的标识符。
您可以设置它们:
- 在 VS 中,项目属性->构建->条件编译符号(如@HimBromBreere 所写)请注意,有用于常用 DEBUG 和 TRACE 符号的复选框
- 从带有 -define 选项的编译器命令行
- 在带有#define 指令的代码中
我正在尝试了解 #if
语句在 C# 上的工作方式及其使用方式。
看完some documentation,我得出的结论是如果定义了condition中的"symbol",就是用来编译里面的代码的。
#if DEBUG
Console.WriteLine("Debug version");
#endif
这里的问题是我不知道"symbol"(在本例中为DEBUG
)是什么意思,由于含义广泛,我正在努力寻找答案这个词。
这些 "symbols" 是什么,这些 "preprocessor directives" 的目的是什么?
那些是预处理器指令。在你的情况下,它将检查 DEBUG
符号是否定义为 #define DEBUG
然后代码 Console.WriteLine
将被执行
#if DEBUG
Console.WriteLine("Debug version");
#endif
正如您已经假设的那样,DEBUG
符号 被编译器 使用以决定是否翻译代码。所以在发布构建中 - DEBUG
不存在 - 代码没有编译成 IL。
此处的符号表示引入编译器的变量。这些在 VS Project Properties-->Build-->conditional complation symbols 中定义。但是,存在一组预定义符号 - 例如 DEBUG
.
正如人们已经说过的,它是一个预处理器指令。 #if DEBUG ... #endif
中的代码将 有条件地编译 ,具体取决于是否定义了符号 DEBUG
。
在这种情况下,DEBUG
只是一个符号名称专门为预处理器引入的符号名称,以便它可以区分应该或不应该的代码块已编译。
您可以在项目设置中定义一个新的预处理器符号:
这里,我们一共定义了四个符号:
DEBUG
TRACE
ANOTHER_SYMBOL
YET_ANOTHER_SYMBOL
DEBUG
和 TRACE
有点特殊,因为它们非常普遍。这就是为什么他们有专门的复选框。此处的术语 "constant" 可与术语 "symbol" 互换使用。但是,在这种特定情况下,我更频繁地听到 "symbol"。
另一种定义符号的方法是通过代码。您可以在 .cs 源文件的开头 添加 #define
指令 :
#define YET_ANOTHER_SYMBOL
除了预定义的,您还可以在文件级别或项目级别定义自己的条件编译符号:
例如,在文件开头键入此内容以定义 "CONDITION1"
#define CONDITION1
或者在项目属性-->构建-->条件编译符号下定义。 在这里您还可以看到预定义的 "debug" 和 "trace" 常量(如果检查了您的配置)。
"Symbols" 在此上下文中表示称为 "conditional compilation symbols" 且仅对 #if 指令有用的标识符。
您可以设置它们:
- 在 VS 中,项目属性->构建->条件编译符号(如@HimBromBreere 所写)请注意,有用于常用 DEBUG 和 TRACE 符号的复选框
- 从带有 -define 选项的编译器命令行
- 在带有#define 指令的代码中