zse*_*rge 7 c c++ variables local switch-statement
嗯,这实际上不是一个问题..
我偶尔发现有一种有趣的方法可以在switch/case块中声明局部变量.您可以编写:而不是在每个案例块中使用大括号
switch (action) {
int res;
int value;
case ACTION_OPEN:
res = open(...);
...
break;
case ...
}
Run Code Online (Sandbox Code Playgroud)
那么,我只是想知道除了gcc之外还有哪些C/C++编译器支持这种结构?它看起来像是一种常见的堕落.欢迎任何关于这种结构的评论!
任何符合标准的 C 或 C++ 编译器都允许这样做。即使是老式的(ISO C99 之前的)C 编译器也允许这样做,但这只是因为变量声明位于块/复合语句的开头(用 表示{})。
请注意,a 后面的内容switch几乎是一个正常的语句,除了 case 标签的可能性之外:
int main(int argc, char* argv[])
{
switch (argc)
default:
puts("Hello, world!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以在 ANSI C89 中,大括号发挥了神奇作用。