GCC编译及选项说明

GCC编译及选项说明

在linux编译时必然离不开gcc,无论你选择makefile、scons还是其他,最终的执行体必然是gcc。
gcc提供了很多参数,包含了告警、错误、优化等。这边记录说明了,方便后期查阅

告警选项

选项说明
-Wall会打开一些很有用的警告选项,建议编译时加此选项。
-W/-Wextra打印一些额外的警告信息。
-w禁止显示所有警告信息。
-Wshadow当一个局部变量遮盖住了另一个局部变量,或者全局变量时,给出警告。很有用的选项,建议打开。 -Wall 并不会打开此项。
-Wpointer-arith对函数指针或者void *类型的指针进行算术操作时给出警告。也很有用。 -Wall 并不会打开此项。
-Wcast-qual当强制转化丢掉了类型修饰符时给出警告。 -Wall 并不会打开此项。
-Waggregate-return如果定义或调用了返回结构体或联合体的函数,编译器就发出警告。
-Winline无论是声明为 inline 或者是指定了-finline-functions 选项,如果某函数不能内联,编译器都将发出警告。如果你的代码含有很多 inline 函数的话,这是很有用的选项。
-Werror把警告当作错误,出现任何警告就放弃编译。
-Wunreachable-code如果编译器探测到永远不会执行到的代码,就给出警告,也是比较有用的选项。
-Wcast-align一旦某个指针类型强制转换导致目标所需的地址对齐增加时,编译器就发出警告。
-Wundef当一个没有定义的符号出现在 #if 中时,给出警告。
-Wredundant-decls如果在同一个可见域内某定义多次声明,编译器就发出警告,即使这些重复声明有效并且毫无差别。

优先级选项

选项说明
-O0禁止编译器进行优化,默认为此项。
-O1尝试优化编译时间和可执行文件大小。
-O2更多的优化,会尝试几乎全部的优化功能,但不会进行“空间换时间”的优化方法。
-O3在 -O2 的基础上再打开一些优化选项:-finline-functions, -funswitch-loops 和 -fgcse-after-reload 。
-Os对生成文件大小进行优化。它会打开 -O2 开的全部选项,除了会那些增加文件大小的。
-finline-functions把所有简单的函数内联进调用者。编译器会探索式地决定哪些函数足够简单,值得做这种内联。
-fstrict-aliasing施加最强的别名规则(aliasing rules)。

C语言选项

选项说明
-fsigned-char把char定义为有/无符号类型,如同signed char/unsigned char。
-fno-builtin不接受没有 _builtin 前缀的函数作为内建函数。
-trigraphs支持ANSI C的三联符( trigraphs)。`-ansi’选项隐含声明了此选项。
-fsigned-bitfields如果没有明确声明signed'或unsigned’修饰符,这些选项用来定义有符号位域或无符号位域。缺省情况下,位域是有符号的,因为它们继承的基本整数类型,如int,是有符号数。
-Wstrict-prototypes如果函数的声明或定义没有指出参数类型,编译器就发出警告。很有用的警告。
-Wmissing-prototypes如果没有预先声明就定义了全局函数,编译器就发出警告。即使函数定义自身提供了函数原形也会产生这个警告。这个选项 的目的是检查没有在头文件中声明的全局函数。
-Wnested-externs如果某extern声明出现在函数内部,编译器就发出警告。

CPP语言选项

选项说明
-ffor-scope从头开始执行程序,也允许进行重定向。
-fno-rtti关闭对 dynamic_cast 和 typeid 的支持。如果你不需要这些功能,关闭它会节省一些空间。
-Wctor-dtor-privacy当一个类没有用时给出警告,因为构造函数和析构函数会被当作私有的。
-Wnon-virtual-dtor当一个类有多态性,而又没有虚析构函数时,发出警告。-Wall会开启这个选项。
-Wreorder如果代码中的成员变量的初始化顺序和它们实际执行时初始化顺序不一致,给出警告。
-Wno-deprecated使用过时的特性时不要给出警告。
-Woverloaded-virtual如果函数的声明隐藏住了基类的虚函数,就给出警告。

机器选项

选项说明
-mtune=cpu-type为指定类型的 CPU 生成代码。cpu-type可以是:i386,i486,i586,pentium,i686,pentium4 等等。
-m32生成32位位机器上的代码。
-m64生成64位机器上的代码。
-mregparm=num当传递整数参数时,控制所使用寄存器的个数。
-mpush-args使用 push 指令来进行存储参数,默认是使用。如果是不使用 -mno-push-args

编译标准

选项说明
-ansi支持符合ANSI标准的C程序,这样就会关闭GNU C中某些不兼容ANSI C的特性。
-std=c89指明使用标准 ISO C90 作为标准来编译程序。
-iso9899:1990同上。
-std=c99指明使用标准 ISO C99 作为标准来编译程序。
-std=iso9899:1999同上。
-std=c++98指明使用标准 C++98 作为标准来编译程序。
-std=gnu9x使用 ISO C99 再加上 GNU 的一些扩展。
-std=gnu99同上。
-fno-asm不把asm, inline或typeof当作关键字,因此这些词可以用做标识符。
-fgnu89-inline告诉编译器在 C99 模式下看到 inline 函数时使用传统的 GNU 句法。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值