C编译器的区别

dkqlctbz  于 2023-05-28  发布在  其他
关注(0)|答案(1)|浏览(103)

根据链接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_compilerhttps://www.programiz.com/c-programming/online-compiler/)允许编译和运行此程序。
为什么会这样呢?这些在线编译器声称使用gcc,但为什么在行为上有这种差异呢?

c3frrgcw

c3frrgcw1#

使用编译器资源管理器进行的测试表明GCC在版本11中进行了更改,以接受带标签的声明,这是对当前C标准语言的扩展。
在您链接到的OnlineGDB编译器中,添加额外的开关-pedantic会产生一条警告消息,确认编译器将其视为语言的扩展,但知道它不是C标准的一部分。
GCC documents:ISO C2X允许将标签放置在声明之前和复合语句的末尾。作为一个扩展,GNU C也允许所有这些在C90模式下。

相关问题