gpt4 book ai didi

c++ - 声明/定义作为 C 和 C++ 中的语句

转载 作者:IT老高 更新时间:2023-10-28 12:31:14 26 4
gpt4 key购买 nike

当这不能在 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 语句的。在 C 和 C++ 中,for 循环括号后的“语句”必须存在。这可以通过添加分号或创建 { } 波浪形括号 block 来完成。

在 C++ 中“int a = 7;”被认为是声明、定义和初始化。在 C 中,我相信它也被认为是所有这些,但是在 C 中,它不被视为“语句”。

有人能准确解释一下为什么在 C 中这不是一个语句,而在 C++ 中它是一个语句吗?这让我对什么是语句的概念感到困惑,因为一种语言说它是,而另一种语言说它不是,所以我有点困惑。

最佳答案

C++ 允许迭代语句的“子语句”隐含地是复合语句 ([stmt.iter])

If the substatement in an iteration-statement is a single statement and not a compound-statement, it is as if it was rewritten to be a compound-statement containing the original statement. Example:

while (--x >= 0)
int i;

可以等效地改写为

while (--x >= 0) {
int i;
}

C 标准没有这种语言。

此外,statement 的定义在 C++ 中更改为包含 declaration statement,因此即使没有进行上述更改,它仍然是合法的。


添加大括号使其工作的原因是因为您的声明现在变成了一个可以包含声明的复合语句

你可以在没有大括号的循环体中有一个标识符,所以你可以这样做:

int a = 5;
for (int i = 0; i < 4; ++i)
a;

关于c++ - 声明/定义作为 C 和 C++ 中的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49861965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com