为什么C标准C11在gcc中不是默认值?

DeM*_*rco 2 c standards gcc

如果你看一下标准,你可以看到它们确实包括对C11和C99的支持.但是如果你试图在没有指定标准的情况下编译代码,GCC仍然会使用C89/C90.

这背后的原因是什么?

我的意思是在其他语言中,通常每当发布新标准时,编译器将被设置为遵循新规则.

为什么这种行为与gcc编译器不一样?

Sne*_*tel 6

为C90编写的代码的99.99%将在C99​​编译器下干净地编译,但不是100%.由于GCC确实是Unix安装的支柱,隐含的假设是新的编译器不会破坏旧软件,因此绝对向后兼容性具有最高优先级.为新软件明确指定C99比回溯并审核所有旧软件以查看哪些位需要明确保留回C90更容易.

  • @Sneftel:祝你找到一个有效的软件包,除非你运行与软件包作者完全相同的发行版/版本.在不同的库版本之间,默认的`CFLAGS`中的`-Werror`这样的愚蠢的东西在编译器作者添加新的警告时就会中断,关于文件系统布局的假设,通常至少需要调整一些**... (3认同)
  • @DeMarco:继承代码是很可怕的,你不知道它做了什么,升级编译器,突然它不是编译,你不知道为什么.(我去过那儿) (2认同)
  • @MooingDuck:当新的优化 - 或稍微改变的 - 优先打破你对UB的假设(你不应该在那里做任何事情)时更加可怕. (2认同)
  • 如果需要,在编译旧软件时,将`-std = gnu89`或`-std = c89`添加到`CFLAGS`总是微不足道的.所以我不认为"不打破旧软件"是一个有力的论据.我宁愿看到旧的软件默认情况下是C99-/C11不兼容的破解*(用一种简单的方法用`CFLAGS`修复它),这样它就可以得到修复而不是腐烂. (2认同)