⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcc 中文手册.htm

📁 linux/unix下面使用GCC编译工具的一个很好的指导电子书籍
💻 HTM
📖 第 1 页 / 共 5 页
字号:
save_y = y, y = new_y;<BR><BR>...<BR><BR>if (change_y) y = 
save_y;<BR><BR>}<BR><BR>这里没有错误,因为只有设置了save_y才使用他.<BR><BR>把所有不返回的函数定义为volatile可以避免某些似是而非的警告.<BR><BR>-Wparentheses<BR><BR>在某些情况下如果忽略了括号,编译器就发出警告.<BR><BR>-Wtemplate-debugging<BR><BR>当在C++程序中使用template的时候,如果调试(debugging)没有完全生效,编译器就<BR>发出警告. 
(仅用于C++).<BR><BR>-Wall<BR><BR>结合所有上述的`-W'选项.通常我们建议避免这些被警告的用法,我们相信,恰当结<BR>合宏的使用能够 
轻易避免这些用法。<BR><BR>剩下的`-W...'选项不包括在`-Wall'中,因为我们认为在必要情况下,这些被编译器<BR>警告 
的程序结构,可以合理的用在"干净的"程序中.<BR><BR>-Wtraditional<BR><BR>如果某些程序结构在传统C中的表现和ANSI 
C不同,编译器就发出警告.<BR><BR>*<BR><BR>宏参出现在宏体的字符串常量内部.传统C会替换宏参,而ANSI 
C则视其为常量的一部<BR>分.<BR><BR>*<BR><BR>某个函数在块(block)中声明为外部,但在块结束后才调用.<BR><BR>*<BR><BR>switch语句的操作数类型是long.<BR><BR>-Wshadow<BR><BR>一旦某个局部变量屏蔽了另一个局部变量,编译器就发出警告.<BR><BR>-Wid-clash-len<BR><BR>一旦两个确定的标识符具有相同的前len个字符,编译器就发出警告.他可以协助你开<BR>发一些将要在某些 
过时的,危害大脑的编译器上编译的程序.<BR><BR>-Wpointer-arith<BR><BR>任何语句如果依赖于函数类型的大小(size)或者void类型的大小,编译器就发出警告<BR>GNU 
C为了 便于计算void 
*指针和函数指针,就把这些类型的大小定义为1.<BR><BR>-Wcast-qual<BR><BR>一旦某个指针强制类型转换以便移除类型修饰符时,编译器就发出警告.例如,如果把<BR>const 
char * 强制转换为普通的char 
*时,警告就会出现.<BR><BR>-Wcast-align<BR><BR>一旦某个指针类型强制转换时,导致目标所需的地址对齐(alignment)增加,编译器就<BR>发出警告.例如,某些机器上 
只能在2或4字节边界上访问整数,如果在这种机型上把<BR>char *强制转换成int *类型, 
编译器就发出警告.<BR><BR>-Wwrite-strings<BR><BR>规定字符串常量的类型是const 
char[length],因此,把这样的地址复制给 non-con<BR>st char 
*指针将产生警告.这些警告能够帮助你在编译期间发现企图写入字符串常<BR>量 
的代码,但是你必须非常仔细的在声明和原形中使用const,否则他们只能带来麻<BR>烦;所以我们没有让 
`-Wall'提供这些警告.<BR><BR>-Wconversion<BR><BR>如果某函数原形导致的类型转换和无函数原形时的类型转换不同,编译器就发出警告<BR>这里包括定点数和浮点数的 
互相转换,改变定点数的宽度或符号,除非他们和缺省<BR>声明(default 
promotion)相同.<BR><BR>-Waggregate-return<BR><BR>如果定义或调用了返回结构或联合的函数,编译器就发出警告. 
(从语言角度你可以<BR>返回一个数组,然而同样会 
导致警告.)<BR><BR>-Wstrict-prototypes<BR><BR>如果函数的声明或定义没有指出参数类型,编译器就发出警告. 
(如果函数的前向引<BR>用说明指出了参数类型,则允许后面 
使用旧式风格的函数定义,而不会产生警告.)<BR><BR><BR>-Wmissing-prototypes<BR><BR>如果没有预先声明函数原形就定义了全局函数,编译器就发出警告.即使函数定义自<BR>身提供了函数原形也会产生这个警告. 
他的目的是检查没有在头文件中声明的全局<BR>函数.<BR><BR>-Wmissing-declarations<BR><BR>如果没有预先声明就定义了全局函数,编译器就发出警告.即使函数定义自身提供了<BR>函数原形也会产生这个警告.这个选项 
的目的是检查没有在头文件中声明的全局函<BR>数.<BR><BR>-Wredundant-decls<BR><BR>如果在同一个可见域某定义多次声明,编译器就发出警告,即使这些重复声明有效并<BR>且毫无差别.<BR><BR>-Wnested-externs<BR><BR>如果某extern声明出现在函数内部,编译器就发出警告.<BR><BR>-Wenum-clash<BR><BR>对于不同枚举类型之间的转换发出警告(仅适用于C++).<BR><BR>-Wlong-long<BR><BR>如果使用了long 
long 类型就发出警告.该警告是缺省项.使用`-Wno-long-long' 选<BR>项能够防止这个警告. 
`-Wlong-long'和`-Wno-long-long'仅在 
`-pedantic'之下才<BR>起作用.<BR><BR>-Woverloaded-virtual<BR><BR>(仅适用于C++.)在继承类中,虚函数的定义必须匹配虚函数在基类中声明的类型特征<BR>(type 
signature).当 继承类声明了某个函数,它可能是个错误的尝试企图定义一个<BR>虚函数,使用这个选项能够产生警告:就是说,当某个函数和基类 
中的虚函数同名,但<BR>是类型特征不符合基类的任何虚函数,编译器将发出警告.<BR><BR>-Winline<BR><BR>如果某函数不能内嵌(inline),无论是声明为inline或者是指定了-finline-functi<BR>ons 
选项,编译器都将发出警告.<BR><BR>-Werror<BR><BR>视警告为错误;出现任何警告即放弃编译.<BR><BR><BR><BR>调试选项(DEBUGGING 
OPTION)<BR><BR>GNU 
CC拥有许多特别选项,既可以调试用户的程序,也可以对GCC排错:<BR><BR>-g<BR><BR>以操作系统的本地格式(stabs, COFF, 
XCOFF,或DWARF).产生调试信息. GDB能够使<BR>用这些调试信息.<BR><BR>在大多数使用stabs格式的系统上, 
`-g'选项启动只有GDB才使用的额外调试信息;这<BR>些信息使GDB 
调试效果更好,但是有可能导致其他调试器崩溃,或拒绝读入程序.如果<BR>你确定要控制是否生成额外的信息, 使用`-gstabs+', `-gstabs', 
`-gxcoff+', `<BR>-gxcoff', `-gdwarf+',或`-gdwarf' (见下文).<BR><BR>和大多数C编译器不同, GNU 
CC允许结合使用`-g'和`-O'选项.优化的代码偶尔制造<BR>一些惊异的结果:某些声明过的变量根本不存在;控制流程直接跑到没有预料到的地<BR>方;某些语句因为计算结果是常量或已经确定而 
没有执行;某些语句在其他地方执行<BR>,因为他们被移到循环外面了.<BR><BR>然而它证明了调试优化的输出是可能的.对可能含有错误的程序使用优化器是合理的<BR><BR><BR>如果GNU 
CC支持输出多种调试信息,下面的选项则非常有用.<BR><BR>-ggdb<BR><BR>以本地格式(如果支持)输出调试信息,尽可能包括GDB扩展.<BR><BR>-gstabs<BR><BR>以stabs格式(如果支持)输出调试信息,不包括GDB扩展.这是大多数BSD系统上DBX使<BR>用的格式.<BR><BR>-gstabs+<BR><BR>以stabs格式(如果支持)输出调试信息,使用只有GNU调试器(GDB)理解的GNU扩展.使<BR>用这些扩展有可能导致 
其他调试器崩溃或拒绝读入程序.<BR><BR>-gcoff<BR><BR>以COFF格式(如果支持)输出调试信息.这是在System 
V第四版以前的大多数System<BR>V系统上SDB使用的 
格式.<BR><BR>-gxcoff<BR><BR>以XCOFF格式(如果支持)输出调试信息.这是IBM 
RS/6000系统上DBX调试器使用的格<BR>式.<BR><BR>-gxcoff+<BR><BR>以XCOFF格式(如果支持)输出调试信息,使用只有GNU调试器(GDB)理解的GNU扩展.使<BR>用这些扩展有可能导致 
其他调试器崩溃或拒绝读入程序.<BR><BR>-gdwarf<BR><BR>以DWARF格式(如果支持)输出调试信息.这是大多数System 
V第四版系统上SDB使用的<BR>格式.<BR><BR>-gdwarf+<BR><BR>以DWARF格式(如果支持)输出调试信息,使用只有GNU调试器(GDB)理解的GNU扩展.使<BR>用这些扩展有可能导致 
其他调试器崩溃或拒绝读入程序.<BR><BR>-glevel<BR><BR>-ggdblevel<BR><BR>-gstabslevel<BR><BR>-gcofflevel 
-gxcofflevel<BR><BR>-gdwarflevel<BR><BR>请求生成调试信息,同时用level指出需要多少信息.默认的level值是2.<BR><BR>Level 
1输出最少量的信息,仅够在不打算调试的程序段内backtrace.包括函数和外<BR>部变量的描述,但是 没有局部变量和行号信息.<BR><BR>Level 
3包含更多的信息,如程序中出现的所有宏定义.当使用`-g3'选项的时候,某些<BR>调试器支持 
宏扩展.<BR><BR>-p<BR><BR>产生额外代码,用于输出profile信息,供分析程序prof使用.<BR><BR>-pg<BR><BR>产生额外代码,用于输出profile信息,供分析程序gprof使用.<BR><BR>-a<BR><BR>产生额外代码,用于输出基本块(basic 
block)的profile信息,它记录各个基本块的<BR>执行次数,供诸如 
tcov此类的程序分析.但是注意,这个数据格式并非tcov期待的.最<BR>终GNU gprof 
将处理这些数据.<BR><BR>-ax<BR><BR>产生额外代码,用于从'bb.in'文件读取基本块的profile参数,把profile的结果写到<BR>'bb.out' 
文件. `bb.in'包含一张函数列表.一旦进入列表中的某个函数, profile<BR>操作就开始,离开最外层的函数后, 
profile操作就结束.以`-'为前缀名的函数排除<BR>在profile操作之外.如果函数名不是唯一的,它可以写成 
`/path/filename.d:func<BR>tionname'来澄清. `bb.out'将列出一些有效的文件名.这四个函数名具有 特殊含义<BR>: 
`__bb_jumps__'导致跳转(jump)频率写进`bb.out'. `__bb_trace__'导致基本块<BR>序列通过 
管道传到`gzip',输出`bbtrace.gz'文件. `__bb_hidecall__'导致从跟踪<BR>(trace)中排除call 指令. 
`__bb_showret__'导致在跟踪中包括返回指令.<BR><BR>-dletters<BR><BR>编译的时候,在letters指定的时刻做调试转储(dump).用于调试编译器.大多数转储<BR>的文件名 
通过源文件名添加字词获得(例如`foo.c.rtl'或`foo.c.jump').<BR><BR>-dM<BR><BR>预处理结束的时候转储所有的宏定义,不输出到文件.<BR><BR>-dN<BR><BR>预处理结束的时候转储所有的宏名.<BR><BR>-dD<BR><BR>预处理结束的时候转储所有的宏定义,同时进行正常输出.<BR><BR>-dy<BR><BR>语法分析(parse)的时候在标准错误转储调试信息.<BR><BR>-dr<BR><BR>RTL阶段后转储到`file.rtl'.<BR><BR>-dx<BR><BR>仅对函数生成RTL,而不是编译.通常和`r'联用.<BR><BR>-dj<BR><BR>第一次跳转优化后转储到`file.jump'.<BR><BR>-ds<BR><BR>CSE 
(包括有时候跟在CSE后面的跳转优化)后转储到`file.cse'.<BR><BR>-dL<BR><BR>循环优化后转储到`file.loop'.<BR><BR>-dt<BR><BR>第二次CSE处理(包括有时候跟在CSE后面的跳转优化)后转储到`file.cse2'.<BR><BR>-df<BR><BR>流程分析(flow 
analysis)后转储到`file.flow'.<BR><BR>-dc<BR><BR>指令组合(instruction 
combination)后转储到`file.combine'.<BR><BR>-dS<BR><BR>第一次指令安排(instruction 
schedule)后转储到`file.sched'.<BR><BR>-dl<BR><BR>局部寄存器分配后转储到`file.lreg'.<BR><BR>-dg<BR><BR>全局寄存器分配后转储到`file.greg'.<BR><BR>-dR<BR><BR>第二次指令安排(instruction 
schedule)后转储到`file.sched2'.<BR><BR>-dJ<BR><BR>最后一次跳转优化后转储到`file.jump2'.<BR><BR>-dd<BR><BR>推迟分支调度(delayed 
branch 
scheduling)后转储到`file.dbr'.<BR><BR>-dk<BR><BR>寄存器-堆栈转换后转储到`file.stack'.<BR><BR>-da<BR><BR>产生以上所有的转储.<BR><BR>-dm<BR><BR>运行结束后,在标准错误显示内存使用统计.<BR><BR>-dp<BR><BR>在汇编输出加注指明使用了哪些模式(pattern)及其替代模式.<BR><BR>-fpretend-float<BR><BR>交叉编译的时候,假定目标机和宿主机使用同样的浮点格式.它导致输出错误的浮点<BR>常数,但是在目标机上运行的时候, 
真实的指令序列有可能和GNU 
CC希望的一样.<BR><BR>-save-temps<BR><BR>保存那些通常是``临时''的中间文件;置于当前目录下,并且根据源文件命名.因此,<BR>用`-c 
-save-temps'选项编译`foo.c '会生成` foo.cpp'和`foo.s' 
以及`foo.o'文<BR>件.<BR><BR>-print-file-name=library<BR><BR>显示库文件library的全路径名,连接时会使用这个库---其他什么事情都不作.根据<BR>这个选项, 
GNU 
CC既不编译,也不连接,仅仅显示文件名.<BR><BR>-print-libgcc-file-name<BR><BR>和`-print-file-name=libgcc.a'一样.<BR><BR>-print-prog-name=program<BR><BR>类似于`-print-file-name',但是查找程序program如`cpp'.<BR><BR><BR><BR>优化选项(OPTIMIZATION 
OPTION)<BR><BR>这些选项控制多种优化措施:<BR><BR>-O<BR><BR>-O1<BR><BR>优化.对于大函数,优化编译占用稍微多的时间和相当大的内存.<BR><BR>不使用`-O'选项时,编译器的目标是减少编译的开销,使编译结果能够调试.语句是独<BR>立的:如果在 
两条语句之间用断点中止程序,你可以对任何变量重新赋值,或者在函<BR>数体内把程序计数器指到其他语句,以及从源程序中 
精确地获取你期待的结果.<BR><BR>不使用`-O'选项时,只有声明了register的变量才分配使用寄存器.编译结果比不用<BR>`-O'选项的PCC要略逊一筹.<BR><BR>使用了`-O'选项,编译器会试图减少目标码的大小和执行时间.<BR><BR>如果指定了`-O'选项, 
`-fthread-jumps'和`-fdefer-pop'选项将被 打开.在有del<BR>ay slot的机器上, 
`-fdelayed-branch'选项将被打开.在即使没有帧指针 (frame<BR>pointer)也支持调试的机器上, 
`-fomit-frame-pointer'选项将被打开.某些机器上<BR>还可能会打开其他选项.<BR><BR>-O2<BR><BR>多优化一些.除了涉及空间和速度交换的优化选项,执行几乎所有的优化工作.例如不<BR>进行循环展开(loop 
unrolling)和函数内嵌(inlining).和-O选项比较,这个选项既<BR>增加了编译时间,也提高了生成代码的 
运行效果.<BR><BR>-O3<BR><BR>优化的更多.除了打开-O2所做的一切,它还打开了-finline-functions选项.<BR><BR>-O0<BR><BR>不优化.<BR><BR>如果指定了多个-O选项,不管带不带数字,最后一个选项才是生效的选项.<BR><BR>诸如`-fflag'此类的选项描述一些机器无关的开关.大多数开关具有肯定和否定两种<BR>格式; 
`-ffoo'开关选项的否定格式应该是`-fno-foo'.下面的列表只展示了一种格<BR>式---那个不是 
默认选项的格式.你可以通过去掉或添加`no-'构造出另一种格式.<BR><BR><BR>-ffloat-store<BR><BR>不要在寄存器中存放浮点变量.这样可以防止某些机器上不希望的过高精度,如6800<BR>0的浮点寄存器(来自 
68881)保存的精度超过了double应该具有的精度.<BR><BR>对于大多数程序,过高精度只有好处.但是有些程序严格依赖于IEEE浮点数的定义.对<BR>这样的程序可以使用 
`-ffloat-store'选项.<BR><BR>-fmemoize-lookups<BR><BR>-fsave-memoized<BR><BR>使用探索法(heuristic)进行更快的编译(仅对C++).默认情况下不使用探索法.由于<BR>探索法只对某些输入文件 
有效,其他程序的编译速度会变得更慢.<BR><BR>第一次编译器必须对成员函数(或对成员数据的引用)建立一个调用.它必须(1)判断<BR>出这个类是否实现了那个名字的 
成员函数; (2)决定调用哪个成员函数(涉及到推测<BR>需要做哪种类型转换); (3)检查成员函数对调用者是否可见.所有这些构成 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -