2

我有一个程序,其switch语句类似于:

switch(n)
{
case 0:
    /* stuff */
    break;

    int foo;
case 1:
    foo = 5;
    break;
case 2:
    foo = 6;
    break;
}

注意和int foo;之间。这个声明是无法到达的:如果你遍历程序,你永远不会跨过它。case 0case 1

使用 Clang 编译时没有警告或错误,但是当我运行它时它似乎被抬高了(尽管这可能是由于其他原因)。

在不可访问的语句中声明一个变量并在可访问的语句中使用它是明确定义的行为,它会起作用吗?

4

1 回答 1

5

只要变量具有微不足道的构造,并且具有(大约)与在更大范围内声明变量相同的效果,它就是明确定义的行为。

如果需要任何初始化,您将收到错误消息。

第 6.7 节说

可以转移到一个块中,但不能通过初始化绕过声明的方式。除非变量具有标量类型、具有普通默认构造函数和普通析构函数的类类型、以及这些类型之一的 cv 限定版本,或上述类型之一的数组,并且在没有初始化程序的情况下声明。

于 2013-04-06T18:50:51.473 回答