C 语言为什么有那么多编译器?
换句话说,各个厂商可以为了自己的利益、根据自己的喜好来开发编译器。
这就导致了一个棘手的问题,有的编译器遵守较新的 C 语言标准,有的编译器只能遵守较老的 C 语言标准,有的编译器还进行了很多扩展。比如:
- GCC、LLVM/Clang 更新非常及时,能够支持最新的 C11 标准(前提是你得使用最新版的编译器)。
- 微软编译器更新比较缓慢,迟迟不能支持新标准。 例如 VC 6.0、VS2010 都在使用 C89 标准,VS2015 部分支持 C99 标准,直到 VS2019 才部分支持 C11 和 C17 标准。微软官方给出的答复是,最新的标准已经在 C++ 中支持了,C语言就没必要再重复了。
初学者经常会遇到这种情况,有些代码在微软编译器下能够正常运行,拿到 GCC 下就不行了,一堆报错信息;或者反过来,在 GCC 上能运行的代码在微软编译器下不能运行。这是因为不同的编译器支持不同的标准,并且每个编译器都进行了自己的扩展,假如你使用了微软编译器私有的扩展函数,那么拿到 GCC 下肯定是不支持的。
微信扫码关注
抖音扫码关注