有时我发现预处理器指令对我的应用程序来说不够灵活,所以我一直在想是否可以交换#if预处理器的功能.
例:
const bool Debug = false;
if (Debug)
{
...
}
Run Code Online (Sandbox Code Playgroud)
编译器会删除if语句及其内容吗?或者,如果Debug常量的值是true,编译器是否会删除条件检查并保留内容?
Eri*_*ert 11
编译器会删除if语句及其内容吗?或者,如果Debug常量的值为true,编译器是否会删除条件检查并保留内容?
是的,是的.但是,这些是实现细节,而不是语言的保证.
if(false)用于控制条件编译的一些有趣方面:
该编辑是不是条件可言; 的身体if会被编译,就像任何其他代码.如果它包含语法错误,您将收到语法错误.如果它包含重载解析错误,您将获得重载解析错误."转到使用",其他IDE功能继续工作.
这与控制非常不同#if false; 由于预处理程序而被省略的文本被视为注释."转到用法"将找不到有条件编译的用法,您不会获得语法着色,等等.但是,代码可以完全破解,因为毕竟它基本上只是一个注释.
然而,第一点是轻微的谎言; 有一点不同.if(false)不检查内部代码是否有明确的分配错误:
int x;
if (false)
Console.WriteLine(x); // no error!
Run Code Online (Sandbox Code Playgroud)
因为毕竟,在用这个程序片段写入之前,没有办法读取x!