2011-11-29 86 views
2

我已经看到了很多关于空报表的问题在C#不C#编译器优化空语句

 string retVal="mystring";; 

我的问题是:如果我们不删除空语句,将编译器删除它们在优化阶段?

回答

5

是的。您可以通过编译带有或不带有空语句的应用程序并在编译的应用程序上检查md5校验和来查看。

+11

我宁愿看IL,然后MD5 ... –

+4

+1 ...但使用Reflector,ILSpy等可能是向您自己证明空白语句已被删除的更好方法。由于与空语句不一定相关的更改,MD5总和可能会发生变化。 – Steve

4

是的,因为分号只是语法。它只是告诉解析器语句结束的地方。解析器将剥离“空语句”,就像词法分析器剥离不需要的空白语句一样。

+1

eek ...划伤“非常喜欢它剥去空白”。词法分析器剥离空白,解析器发出空语句,并通过优化步骤生成不必要的语句(如“if(false){...}”)。细微的区别。 – riwalk

+0

@ Stargazer712:好的,谢谢。 –

5

空语句(就像你引用的那样)通常被解析器识别,甚至不会将它放到抽象语法树中。

所以是的,他们绝对被删除。

+0

我喜欢这个答案最好,解析器消除它,所以编译器甚至从来没有看到它。无论您是否打开或关闭了优化,都会发生这种情况;在这种情况下,它甚至不是编译器的功能。 – mattypiper