【发布时间】:2014-09-16 12:12:04
【问题描述】:
我在其他网站上提出了这个程序并想尝试一下,程序如下:
#include <stdio.h>
int main()
{
int a=10;
switch(a)
{
case '1': printf("one");
break;
case '2': printf("two");
break;
defau4t: printf("none");
}
return 0;
}
令人惊讶的是,它编译时没有错误或警告。这怎么可能?关键字“默认”没有错误吗?
谁能解释这种行为?
【问题讨论】:
-
编译器将其解释为
goto标签。 -
gcc在警告中解释:14:10: warning: label 'defau4t' defined but not used -
@darknight:您是否至少在没有
-Wall -Wextra的情况下使用GCC? ;-) -
@darknight:那么,你在一个问题中学到了两件事。 ;-)
-
您应该始终将 gcc 称为
gcc -std=c99 -pedantic-errors -Wall -Wextra(其中 c99 可以替换为 c11 或 c90)。将其称为gcc test.c不仅会错过许多危险的练习,还会期望您通过一个用某种幻想的非标准 GNU 语言而不是 ISO 标准 C 语言编写的程序。
标签: c++ c switch-statement default