注意:我在发布的示例中发现了一些错误 - 编辑修复它
如果不启用优化,官方C#编译器会做一些有趣的事情.
例如,一个简单的if语句:
int x;
// ... //
if (x == 10)
// do something
Run Code Online (Sandbox Code Playgroud)
如果优化,会变成以下内容:
ldloc.0
ldc.i4.s 10
ceq
bne.un.s do_not_do_something
// do something
do_not_do_something:
Run Code Online (Sandbox Code Playgroud)
但如果我们禁用优化,它会变成这样:
ldloc.0
ldc.i4.s 10
ceq
ldc.i4.0
ceq
stloc.1
ldloc.1
brtrue.s do_not_do_something
// do something
do_not_do_something:
Run Code Online (Sandbox Code Playgroud)
我无法理解这一点.为什么所有额外的代码,似乎在源中不存在?在C#中,这相当于:
int x, y;
// ... //
y = x == 10;
if (y != 0)
// do something
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这样做?
我试图在W3C HTML规范中找到答案,但到目前为止还没有运气.
例如,如果我有以下HTML代码:
<body>
<p>
<foo>bar</foo>
</p>
</body>
Run Code Online (Sandbox Code Playgroud)
W3C是否指定用户代理应如何处理此问题?例如,"foo"元素应该被完全忽略吗?是否应忽略"foo"元素但解析内容"bar"?
此外,这样做甚至"合法"吗?
编辑:各位的一些优秀答案!我完全同意嵌入通用XML是不好的做法,除非您可以完全控制用户将使用哪个浏览器.如果要制作这样的标记,我对于实际会发生或将要发生的事情感到非常好奇:-)