我不明白为什么会这样:
if(1)
{
int i;
}
而这不是:
if(1)
int i;
错误:int之前的预期表达式
如果您可以提供一些标准参考。
答案 0 :(得分:7)
在C语言中,声明只能作为复合语句的一部分出现,而不能作为任何其他语句的一部分出现(参见C11 6.8和6.8)。 2)。
答案 1 :(得分:4)
声明必须是块项 1 的一部分。
block-item-list包含一个块项 2 。
并且block-item-list只能在括号内,作为复合语句 3 的一部分。
这与C ++不同,因为声明中包含声明语句(前者允许通过块语句定义变量)。
(引自ISO / IEC 9899:201x 6.8.2复合声明1)
1
块项:
声明
2
块项目列表:
块项目
block-item-list block-item
3
复合语句:
{block-item-list opt}
答案 2 :(得分:4)
这是由于C语法。具体而言,if
语句定义为:
if( expression ) statement
根据C11 6.8 声明和阻止,声明是以下之一:
标记语句
化合物语句
表达式语句
选择语句
迭代语句
跳语句
声明只能直接出现在复合语句中(即由{ ... }
分隔)或作为for
迭代语句中第一个表达式的特殊情况。
答案 3 :(得分:3)
从section 6.8.2p1中可以看到,{ ... }
- 样式示例,复合语句中允许声明。< / p>
但是,
Section 6.8.4p1涵盖了选择语句的语法(即if (...) ...
)并未明确允许任何声明。此外,此表示法需要表达式,如错误消息所示,“预期表达式 ...”
答案 4 :(得分:0)
第一个代码示例声明只在一个空的范围内可见的int ...很难看到该实用程序!第二个显然是有条件的尝试?声明在封闭(函数?)范围内可见的int。很难想象这种条件声明的效用......是否需要运行时重新编译?