无法在switch case中声明变量。
无法在switch case中声明变量。
这个问题已经有了答案:
#include void main() { int a = 4; switch (a) { case 4: int res = 1; printf("%d",res); break; } }
当我使用 gcc 编译这段代码时,我得到了一个错误。
root@ubuntu:/home/ubuntu# gcc test.c -o t test.c: In function ‘main’: test.c:9:4: error: a label can only be part of a statement and a declaration is not a statement int res = 1;
但是当我像 case 4:;
这样添加一个 ;
,就可以编译代码了。
这是什么问题,为什么 ;
可以解决它?
admin 更改状态以发布 2023年5月21日
问题出在你的错误信息里面:标签只能附加到语句上,而声明不是语句。
查看 N1570 6.8.2 Compound statement,它分别列出了 declaration
和 statement
,它们是不同的东西。
Syntax 1 compound-statement: { block-item-listopt } block-item-list: block-item block-item-list block-item block-item: declaration statement
case 4:;
中的 ;
是一个空语句(在 N1570 6.8.3 Expression and null statements 中定义),它是一个语句,因此是被允许的。