gpt4 book ai didi

带大括号的 case 语句

转载 作者:行者123 更新时间:2023-12-03 23:33:32 26 4
gpt4 key购买 nike

为什么 case 语句允许在大括号内声明,但不允许在大括号内声明?

比如下面的不行

switch (op->name) {
case 0:
int a = 2;
case 1:
int b = 3;
}

但以下是可以的:

switch (op->name) {
case 0:
{int a = 2;}
case 1:
{int b = 3;}
}

大括号如何解决没有它们的声明对编译器来说是模棱两可的?对我(C 初学者)来说,似乎每个 case 语句都应该有一个隐含的大括号,直到下一个 case/default/end-of-switch,但这显然是错误的!

最佳答案

Why does a case statement allow declarations within braces but not without them?

我的编译器发出此错误消息:

error: a label can only be part of a statement and a declaration is not a statement

我认为这很清楚。标签,包括案例标签,不被认为是独立的语句或声明,而是语句的组成部分。当控制分支到标签时,无论是通过switch还是goto,程序跳转到的都是标签所在的语句。不是标签本身,它通常没有运行时表示。

int a; 等声明不是语句,标签不能是声明的一部分。另一方面,像 { int a; 这样的 block } 语句,作为语句,它们可以有标签。

这里没有基本的潜在约束。 C 语法可能有不同的定义,因此您的两个示例都是有效的。只是没有。

关于带大括号的 case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65854376/

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