`-ansi'选项能够阻止alloca和_exit成为内建函数.
-fhosted
按宿主环境编译;他隐含声明了`-fbuiltin'选项,而且警告不正确的main函数声明.
-ffreestanding
按独立环境编译;他隐含声明了`-fno-builtin'选项,而且对main函数没有特别要求.
(译注:宿主环境(hosted environment)下所有的标准库可用, main函数返回一个int值,典型例子是除了 内核以外几乎 所有的程序.对应的独立环境(freestanding environment)不存在标准库,程序入口也不一定是 main,最明显的例子就是操作系 统内核.详情参考gcc网站最近的资料)
-fno-strict-prototype
对于没有参数的函数声明,例如`int foo ();',按C风格处理---即不说明参数个数或类型. (仅针对C++).正常情况下,这样的函数foo在C++中意味着参数为空.
-trigraphs
支持ANSI C trigraphs. `-ansi'选项隐含声明了`-trigraphs'.
-traditional
试图支持传统C编译器的某些方面.详见GNU C手册,我们已经把细节清单从这里删除,这样当内容过时后,人们也不会 埋怨我们.
除了一件事:对于C++程序(不是C), `-traditional'选项带来一个附加效应,允许对 this赋值.他和`-fthis-is-variable'选项的效果一样.
-traditional-cpp
试图支持传统C预处理器的某些方面.特别是上面提到有关预处理器的内容,但是不包括 `-traditional'选项的其他效应.
-fdollars-in-identifiers
允许在标识符(identifier)中使用`$'字符(仅针对C++).你可以指定 `-fno-dollars-in-identifiers'选项显明禁止使用`$'符. (GNU C++在某些 目标系统缺省允许`$'符,但不是所有系统.)
-fenum-int-equiv
允许int类型到枚举类型(enumeration)的隐式转换(仅限于C++).正常情况下GNU C++允许从 enum到int的转换,反之则不行.
-fexternal-templates
为模板声明(template declaration)产生较小的代码(仅限于C++),方法是对于每个模板函数 (template function),只在定义他们的地方生成一个副本.想要成功使用这个选项,你必须在所有使用模板的 文件中,标记 `#pragma implementation' (定义)或`#pragma interface' (声明).
当程序用`-fexternal-templates'编译时,模板实例(template instantiation) 全部是外部类型.你 必须让需要的实例在实现文件中出现.可以通过typedef实现这一点,他引用所需的每个 实例.相对应的,如果编译时使用缺省选项`-fno- external-templates',所有模板实例明确的设为内置.
-fall-virtual
所有可能的成员函数默认为虚函数.所有的成员函数(除了构造子函数和new或delete 成员操作符)视为所在类的虚函数.
这不表明每次调用成员函数都将通过内部虚函数表.有些情况下,编译器能够判断出可以直接调用某个虚函数;这时就 直接调用.
-fcond-mismatch
允许条件表达式的第二和第三个参数的类型不匹配.这种表达式的值是void.
-fthis-is-variable
允许对this赋值(仅对C++).合并用户自定义的自由存储管理机制到C++后,使可赋值的 `this'显得不合时宜.因此,默认情况下,类 成员函数内部对this赋值是无效操作.然而为了 向后兼容,你可以通过`-fthis-is-variable'选项使这种操作有效.
-funsigned-char
把char定义为无符号类型,如同unsigned char.
各种机器都有自己缺省的char类型.既可能是unsigned char也可能是signed char .
理想情况下,当依赖于数据的符号性时,一个可移植程序总是应该使用signed char或unsigned char.但是许多程序已经写成只 用简单的char,并且期待这是有符号数(或者无符号数,具体情况取决于 编写程序的目标机器).这个选项,和它的反义选项,使那样的程序工作在对应的默 认值上.
char的类型始终应该明确定义为signed char或unsigned char,即使 它表现的和其中之一完全一样.
-fsigned-char
把char定义为有符号类型,如同signed char.
这个选项等同于`-fno-unsigned-char',他是the negative form of `-funsigned-char'的相反选项.同样, `-fno-signed-char'等价于 `-funsigned-char'.
-fsigned-bitfields
-funsigned-bitfields
-fno-signed-bitfields
-fno-unsigned-bitfields
如果没有明确声明`signed'或`unsigned'修饰符,这些选项用来定义有符号位域 (bitfield)或无符号位域.缺省情况下,位域是有符号的,因为他们继承的基本整数类型,如int,是 有符号数.
然而,如果指定了`-traditional'选项,位域永远是无符号数.
-fwritable-strings
把字符串常量存储到可写数据段,而且不做特别对待.这是为了兼容一些老程序,他们假设字符串常量是可写的. `-traditional'选项也有相同效果.
篡改字符串常量是一个非常糟糕的想法; ``常量''就应该是常量.
预处理器选项(Preprocessor Option)
下列选项针对C预处理器,预处理器用在正式编译以前,对C 源文件进行某种处理.
如果指定了`-E'选项, GCC只进行预处理工作.下面的某些选项必须和`-E'选项一起才 有意义,因为他们的输出结果不能用于编译.
-include file
在处理常规输入文件之前,首先处理文件file,其结果是,文件file的内容先得到编译. 命令行上任何`-D'和`-U'选项永远在`- include file'之前处理, 无论他们在命令行上的顺序如何.然而`-include'和`-imacros'选项按书写顺序处理.
-imacros file
在处理常规输入文件之前,首先处理文件file,但是忽略输出结果.由于丢弃了文件file的 输出内容, `-imacros file'选项 的唯一效果就是使文件file中的宏定义生效, 可以用于其他输入文件.在处理`-imacrosfile'选项之前,预处理器首先处理`-D' 和`- U'选项,并不在乎他们在命令行上的顺序.然而`-include'和 `-imacros'选项按书写顺序处理.
-idirafter dir





