在C开关/ case中声明变量

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++编译器支持这种结构?它看起来像是一种常见的堕落.欢迎任何关于这种结构的评论!

Fre*_*Foo 1

任何符合标准的 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 中,大括号发挥了神奇作用。