可能重复:
Variable declarations following if statements
Why this compile error
我收到错误“嵌入式语句不能是声明或标记语句”,因为我在if语句后面没有括号声明变量。无论如何,这就是背景,这让我想到了这一点。
以下代码是非法的
if (true) int i = 7;
但是,如果你用括号括起来,那就完全合法了。
if (true){ int i = 7;}
这两段代码都没用。然而第二个是好的。这种行为的具体解释是什么?
答案 0 :(得分:2)
第一个版本没有表达式语句,只是在if之后的声明,但是如果需要声明则遵循它。
第二个版本有一个声明。一对{}括号已经是一个语句,即使它是空的(声明不再计为语句)。
答案 1 :(得分:1)
因为你声明一个变量意味着你正在创建一个语句。语句块必须括在括号{}中。在这里,您可以阅读有关Statements
的更多信息答案 2 :(得分:1)
这两段代码都没用。
编译器无法检查是否有用,它只能检查明确的“无用”:
如果您在第二个中使用该变量,则可能有意义。
但是,在第一个示例中,您不能使用变量i
,因为它已经超出了下一行的范围 - 您没有机会添加另一行使声明再次有用。
尽管如此,第二个应该生成一个警告,例如“已分配变量i
但从未使用过它的值。”
答案 3 :(得分:1)
未括在{}括号中的嵌入式语句不能是声明语句或带标签的语句。有关详细信息,请访问http://msdn.microsoft.com/en-us/library/ms173143.aspx
除此之外,如果你声明变量,那么如果条件结束,那么变量范围结束。所以编译器会给出错误是有意义的。如果你改用{},编译器将假设你要在'{'和'}'之间的某个地方使用这个变量
答案 4 :(得分:0)
以非常通用的方式解释:它是在括号编译器中间的原因“推测”它使用的。
如果没有括号,则无法使用初始化后的变量。相反,在括号内,可以。
在我的问题上查看优秀Skeet答案,Eric Lippert也发表评论。