当这不能在 C 中编译时我很困惑:
int main()
{
for (int i = 0; i < 4; ++i)
int a = 5; // A dependent statement may not be declaration
return 0;
}
我习惯了 C++ 来编译它。我只是目瞪口呆地看了一会儿,直到我想起了 SO 上的一个答案,关于在 C 和 C++ 中如何将不同的事物视为“语句”。这是关于 switch 语句的。 for 循环括号后面的“语句”必须出现在 C 和 C++ 中。这可以通过添加分号或创建 { } 波浪括号块来完成。
在 C++ 中“int a = 7;”被视为声明、定义和初始化。在 C 中,我相信它也被认为是所有这些,但是在 C 中,它不被认为是“语句”。
有人能准确地解释为什么在 C 中这不是一个语句,而在 C++ 中它是吗?这让我对语句是什么的概念感到困惑,因为一种语言说它是,另一种语言说它不是,所以我有点困惑。
C++ 允许迭代语句的“子语句”隐式是复合语句 ([stmt.iter])
如果迭代语句中的子语句是单个语句而不是复合语句,则就好像
它被重写为包含原始语句的复合语句。例子:
while (--x >= 0)
int i;
可以等效地重写为
while (--x >= 0) {
int i;
}
C标准没有这种语言。
另外,定义一个陈述在 C++ 中进行了更改以包含声明声明,因此即使不进行上述更改,它仍然是合法的。
添加大括号使其起作用的原因是因为您的声明现在变成了复合语句其中可以包含声明。
您可以拥有一个标识符在没有大括号的循环体中,所以你可以这样做:
int a = 5;
for (int i = 0; i < 4; ++i)
a;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)