GCC 中文手册(中)

本文档详细介绍了GCC编译器的使用,包括C++的编译过程、选项设置和优化技巧,同时涵盖文件管理和汇编语言方面的知识。
摘要由CSDN通过智能技术生成
                                    GCC 中文手册(中)



-Wparentheses
在某些情况下如果忽略了括号 , 编译器就发出警告 .

-Wtemplate-debugging
当在 C++ 程序中使用 template 的时候 , 如果调试 (debugging) 没有完全生效 , 编译器就发出警告 . ( 仅用于 C++).

-Wall
结合所有上述的 `-W' 选项 . 通常我们建议避免这些被警告的用法,我们相信 , 恰当结合宏的使用能够 轻易避免这些用法。

剩下的`-W...'选项不包括在`-Wall',因为我们认为在必要情况下,这些被编译器警告 的程序结构,可以合理的用在"干净的"程序中.

-Wtraditional
如果某些程序结构在传统 C 中的表现和 ANSI C 不同 , 编译器就发出警告 .

   *
宏参出现在宏体的字符串常量内部 . 传统 C 会替换宏参 , ANSI C 则视其为常量的一部分 .

   *
某个函数在块 (block) 中声明为外部 , 但在块结束后才调用 .

   *
switch 语句的操作数类型是 long.

-Wshadow
一旦某个局部变量屏蔽了另一个局部变量 , 编译器就发出警告 .

-Wid-clash-len
一旦两个确定的标识符具有相同的前 len 个字符 , 编译器就发出警告 . 他可以协助你开发一些将要在某些 过时的 , 危害大脑的编译器上编译的程序 .

-Wpointer-arith
任何语句如果依赖于函数类型的大小 (size) 或者 void 类型的大小 , 编译器就发出警告 . GNU C 为了 便于计算 void * 指针和函数指针 , 就把这些类型的大小定义为 1.

-Wcast-qual
一旦某个指针强制类型转换以便移除类型修饰符时 , 编译器就发出警告 . 例如 , 如果把 const char * 强制转换为普通的 char * , 警告就会出现 .

-Wcast-align
一旦某个指针类型强制转换时 , 导致目标所需的地址对齐 (alignment) 增加 , 编译器就发出警告 . 例如 , 某些机器上 只能在 2 4 字节边界上访问整数 , 如果在这种机型上把 char * 强制转换成 int * 类型 , 编译器就发出警告 .

-Wwrite-strings
规定字符串常量的类型是 const char[length], 因此 , 把这样的地址复制给 non-const char * 指针将产生警告 . 这些警告能够帮助你在编译期间发现企图写入字符串常量 的代码 , 但是你必须非常仔细的在声明和原形中使用 const, 否则他们只能带来麻烦 ; 所以我们没有让 `-Wall' 提供这些警告 .

-Wconversion
如果某函数原形导致的类型转换和无函数原形时的类型转换不同 , 编译器就发出警告 . 这里包括定点数和浮点数的 互相转换 , 改变定点数的宽度或符号 , 除非他们和缺省声明 (default promotion) 相同 .

-Waggregate-return
如果定义或调用了返回结构或联合的函数 , 编译器就发出警告 . ( 从语言角度你可以返回一个数组 , 然而同样会 导致警告 .)

-Wstrict-prototypes
如果函数的声明或定义没有指出参数类型 , 编译器就发出警告 . ( 如果函数的前向引用说明指出了参数类型 , 则允许后面 使用旧式风格的函数定义 , 而不会产生警告 .)

-Wmissing-prototypes
如果没有预先声明函数原形就定义了全局函数 , 编译器就发出警告 . 即使函数定义自身提供了函数原形也会产生这个警告 . 他的目的是检查没有在头文件中声明的全局函数 .

-Wmissing-declarations
如果没有预先声明就定义了全局函数 , 编译器就发出警告 . 即使函数定义自身提供了函数原形也会产生这个警告 . 这个选项 的目的是检查没有在头文件中声明的全局函数 .

-Wredundant-decls
如果在同一个可见域某定义多次声明 , 编译器就发出警告 , 即使这些重复声明有效并且毫无差别 .

-Wnested-externs
如果某 extern 声明出现在函数内部 , 编译器就发出警告 .

-Wenum-clash
对于不同枚举类型之间的转换发出警告 ( 仅适用于 C++).

-Wlong-long
如果使用了 long long 类型就发出警告 . 该警告是缺省项 . 使用 `-Wno-long-long' 选项能够防止这个警告 . `-Wlong-long' `-Wno-long-long' 仅在 `-pedantic' 之下才起作用 .

-Woverloaded-virtual
( 仅适用于 C++.) 在继承类中 , 虚函数的定义必须匹配虚函数在基类中声明的类型特征 (type signature). 当 继承类声明了某个函数 , 它可能是个错误的尝试企图定义一个虚函数 , 使用这个选项能够产生警告 : 就是说 , 当某个函数和基类 中的虚函数同名 , 但是类型特征不符合基类的任何虚函数 , 编译器将发出警告 .

-Winline
如果某函数不能内嵌 (inline), 无论是声明为 inline 或者是指定了 -finline-functions 选项 , 编译器都将发出警告 .

-Werror
视警告为错误 ; 出现任何警告即放弃编译 .

 

调试选项(DEBUGGING OPTION)

GNU CC 拥有许多特别选项 , 既可以调试用户的程序 , 也可以对 GCC 排错 :
-g
以操作系统的本地格式 (stabs, COFF, XCOFF, DWARF). 产生调试信息 . GDB 能够使用这些调试信息 .

在大多数使用stabs格式的系统上, `-g'选项启动只有GDB才使用的额外调试信息;这些信息使GDB 调试效果更好,但是有可能导致其他调试器崩溃,或拒绝读入程序.如果你确定要控制是否生成额外的信息, 使用`-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', `-gdwarf+',`-gdwarf' (见下文).

和大多数C编译器不同, GNU CC允许结合使用`-g'`-O'选项.优化的代码偶尔制造 一些惊异的结果:某些声明过的变量根本不存在;控制流程直接跑到没有预料到的地方;某些语句因为计算结果是常量或已经确定而 没有执行;某些语句在其他地方执行,因为他们被移到循环外面了.

然而它证明了调试优化的输出是可能的.对可能含有错误的程序使用优化器是合理的.

如果GNU CC支持输出多种调试信息,下面的选项则非常有用.

-ggdb
以本地格式 ( 如果支持 ) 输出调试信息 , 尽可能包括 GDB 扩展 .

-gstabs
stabs 格式 ( 如果支持 ) 输出调试信息 , 不包括 GDB 扩展 . 这是大多数 BSD 系统上 DBX 使用的格式 .

-gstabs+
stabs 格式 ( 如果支持 ) 输出调试信息 , 使用只有 GNU 调试器 (GDB) 理解的 GNU 扩展 . 使用这些扩展有可能导致 其他调试器崩溃或拒绝读入程序 .

-gcoff
COFF 格式 ( 如果支持 ) 输出调试信息 . 这是在 System V 第四版以前的大多数 System V 系统上 SDB 使用的 格式 .

-gxcoff
XCOFF 格式 ( 如果支持 ) 输出调试信息 . 这是 IBM RS/6000 系统上 DBX 调试器使用的格式 .

-gxcoff+
XCOFF 格式 ( 如果支持 ) 输出调试信息 , 使用只有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值