今天,我偶然发现我的编译器在没有case语句的情况下写代码时并不会报错。(它会抱怨缺少case语句,但在代码后添加一个case语句后,竟然没有任何警告来告诉我代码是无用的。)
我正在努力弄清楚允许以下代码是否有目的,还是只是那种“限制它更麻烦,所以允许”的事情之一。
这个现在输出"4",当a == 4时,正如预期的那样,它从来没有输出foo。所以问题是,是否有一些(潜在的,但有用的)原因允许在第一个case之前有
顺便说一下,我已经在MSVC 2012和GCC 4.8.1上进行了测试,它们产生了相同的行为。令人惊讶的是,它们也都没有输出警告。
我还尝试了带有
我正在努力弄清楚允许以下代码是否有目的,还是只是那种“限制它更麻烦,所以允许”的事情之一。
#include <iostream>
void foo() {
std::cout << "foo" << std::endl;
}
int main()
{
for (int a = -10; a < 10; ++a)
{
switch(a)
{
foo();
case 4:
std::cout << "4" << std::endl;
}
}
}
这个现在输出"4",当a == 4时,正如预期的那样,它从来没有输出foo。所以问题是,是否有一些(潜在的,但有用的)原因允许在第一个case之前有
foo();
这样的语句?我确定我不能在那里声明和初始化变量。顺便说一下,我已经在MSVC 2012和GCC 4.8.1上进行了测试,它们产生了相同的行为。令人惊讶的是,它们也都没有输出警告。
我还尝试了带有
-Wall
的gcc。在一个古老版本的GCC(AIX上的3.3.2)上,我得到了一个无法到达的代码警告。在一个更近期的版本(Cygwin上的4.5.3)上,我没有收到警告。
-Wall
。在一个古老版本的GCC(AIX上的3.3.2)上,我收到了一个无法访问代码警告。在一个更近期的版本(Cygwin上的4.5.3),我没有收到任何警告。 - Fred Larson