C和C++安全编码(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.4.2 编译器

编译器及其相关运行库的选择对程序的安全有着重大的影响。本书中的例子主要针对Windows上的Visual C++和Linux上的GCC两款编译器,下面对它们稍作介绍。

Visual C++。微软的Visual C++是Windows平台上占据优势地位的C和C++编译器。Visual C++实际上是一个编译器产品的家族,其中包括Visual Studio 2012、Visual Studio 2010、Visual Studio 2008、Visual Studio 2005以及更早的版本。这些版本均广泛使用,它们提供的功能各有不同,包括其提供的安全特性也是如此。大体来说,越新的编译器版本提供的安全特性就越多、越高级。以Visual Studio 2012为例,包括对C++11标准的改进支持。

GCC。GCC全称是GNU编译器集(GNU Compiler Collection),其中包括C、C++、Objective-C、Fortran、Java、Ada,以及这些语言对应的库。GCC编译器是Linux平台上的主流C和C++编译器。

GCC支持3个版本的C标准:C89、AMD1和C99。默认情况下,GCC遵循ANSI(ISO C89)标准并加上GNU特有的一些扩展。GCC编译器提供了一个-std标志,该标志允许用户在编译C程序时指定希望遵循的标准。目前,GCC编译器尚不完全支持C99规范,有几个列出的特性遗失或损坏 [1]。GCC也对C11标准提供有限的、不完整的部分支持。

[1] 详情参见http://gcc.gnu.org/c99status.html。