根据链接C Switch-case curly braces after every case,下面的代码不应该编译,因为变量在switch中声明时没有大括号。
case 2:
int s = 0;
printf("enter side value:");
scanf("%d", &s);
printf("area of square is %d", squarearea(s));
break;
然而,许多在线c编辑器(https://www.onlinegdb.com/online_c_compiler,https://www.programiz.com/c-programming/online-compiler/)允许编译和运行此程序。
为什么会这样呢?这些在线编译器声称使用gcc,但为什么在行为上有这种差异呢?
1条答案
按热度按时间c3frrgcw1#
使用编译器资源管理器进行的测试表明GCC在版本11中进行了更改,以接受带标签的声明,这是对当前C标准语言的扩展。
在您链接到的OnlineGDB编译器中,添加额外的开关
-pedantic
会产生一条警告消息,确认编译器将其视为语言的扩展,但知道它不是C标准的一部分。GCC documents:ISO C2X允许将标签放置在声明之前和复合语句的末尾。作为一个扩展,GNU C也允许所有这些在C90模式下。