【发布时间】:2016-05-12 15:55:10
【问题描述】:
奇怪的是,我在一个 switch 语句中初始化了以下数组 c,完全期望我的编译器说不,你不能这样做,但令我惊讶的是它在 MSVC、GCC 和 Clang 中编译.在线example
我假设标准允许它,在这种情况下我的问题是为什么? ...考虑到在 case 语句中不允许声明和初始化非数组。
int main()
{
char ch;
switch( ch )
{
case 'x':
//int a = 42; // NOT OKAY
break;
case 'y':
int b;
b = 42; // OKAY
case 'z':
int c[2] = { 0 , 1 }; // OKAY (Huh???)
break;
};
}
【问题讨论】:
-
您为什么希望编译器不喜欢这样?
c在switch(ch)的上下文中完全有效,但在外部不可见。 -
定义(本地)和初始化数组是可以的,但是您将无法在
switch范围之外使用它...(int a = 42;也应该可以正常工作)(。 .. 没有理由在这里标记 C++) -
这只是一个 MWE。我打算在case语句中使用
c。 -
@AlexLop。这个问题涉及到 C 和 C++
标签: c++ c arrays initialization switch-statement