📄 gcc中文手册1.htm
字号:
<BR><BR>-Dmacro <BR>定义宏macro,宏的内容定义为字符串`1’.
<BR><BR>-Dmacro=defn
<BR>定义宏macro的内容为defn.命令行上所有的`-D’选项在 `-U’选项之前处理.
<BR><BR>-Umacro
<BR>取消宏macro. `-U’选项在所有的`-D’选项之后处理,但是优先于任何 `-include’或`-imacros’选项.
<BR><BR>-dM
<BR>告诉预处理器输出有效的宏定义列表(预处理结束时仍然有效的宏定义).该选项需结合`-E’选项使用.
<BR><BR>-dD <BR>告诉预处理器把所有的宏定义传递到输出端,按照出现的顺序显示.
<BR><BR>-dN
<BR>和`-dD’选项类似,但是忽略宏的参量或内容.只在输出端显示`#define name.
<BR><BR> <BR>汇编器选项(ASSEMBLER OPTION) <BR>-Wa,option
<BR>把选项option传递给汇编器.如果option含有逗号,就在逗号处分割成多个选项. <BR><BR>
<BR>连接器选项(LINKER OPTION)
<BR>下面的选项用于编译器连接目标文件,输出可执行文件的时候.如果编译器不进行 连接,他们就毫无意义.
<BR><BR>object-file-name
<BR>如果某些文件没有特别明确的后缀a special recognized suffix, GCC就认为他们是目标文件或库文件. (根据文件内容,连接器能够区分目标文件和库文件).如果GCC执行连接操作,这些目标文件将成为连接器的输入文件.
<BR><BR>-llibrary <BR>连接名为library的库文件.
<BR>连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`liblibrary.a’.连接器会 当做文件名得到准确说明一样引用这个文件.
<BR><BR>搜索目录除了一些系统标准目录外,还包括用户以`-L’选项指定的路径.
<BR><BR>一般说来用这个方法找到的文件是库文件---即由目标文件组成的归档文件(archive file).连接器处理归档文件的 方法是:扫描归档文件,寻找某些成员,这些成员的符号目前已被引用,不过还没有被定义.但是,如果连接器找到普通的 目标文件,而不是库文件,就把这个目标文件按平常方式连接进来.指定`-l’选项和指定文件名的唯一区别是, `-l选项用`lib’和`.a’把library包裹起来,而且搜索一些目录.
<BR><BR><BR>-lobjc <BR>这个-l选项的特殊形式用于连接Objective C程序.
<BR><BR>-nostartfiles <BR>不连接系统标准启动文件,而标准库文件仍然正常使用.
<BR><BR>-nostdlib <BR>不连接系统标准启动文件和标准库文件.只把指定的文件传递给连接器.
<BR><BR>-static
<BR>在支持动态连接(dynamic linking)的系统上,阻止连接共享库.该选项在其他系统上无效.
<BR><BR>-shared
<BR>生成一个共享目标文件,他可以和其他目标文件连接产生可执行文件.只有部分系统支持该选项.
<BR><BR>-symbolic
<BR>建立共享目标文件的时候,把引用绑定到全局符号上.对所有无法解析的引用作出警告(除非用连接编辑选项 `-Xlinker -z -Xlinker defs’取代).只有部分系统支持该选项.
<BR><BR><BR>-Xlinker option
<BR>把选项option传递给连接器.可以用他传递系统特定的连接选项, GNU CC无法识别这些选项.
<BR>如果需要传递携带参数的选项,你必须使用两次`-Xlinker’,一次传递选项,另一次传递他的参数. 例如,如果传递`-assert definitions’,你必须写成`-Xlinker -assert -Xlinker definitions’,而不能写成`-Xlinker "-assert definitions"’,因为这样会把整个 字符串当做一个参数传递,显然这不是连接器期待的.
<BR><BR><BR>-Wl,option
<BR>把选项option传递给连接器.如果option中含有逗号,就在逗号处分割成多个选项.
<BR><BR>-u symbol
<BR>使连接器认为取消了symbol的符号定义,从而连接库模块以取得定义.你可以使用多个 `-u’选项,各自跟上不同的符号,使得连接器调入附加的库模块.
<BR><BR> <BR>目录选项(DIRECTORY OPTION)
<BR>下列选项指定搜索路径,用于查找头文件,库文件,或编译器的某些成员: <BR>-Idir
<BR>在头文件的搜索路径列表中添加dir 目录. <BR><BR>-I-
<BR>任何在`-I-’前面用`-I’选项指定的搜索路径只适用于`#include "file"’这种情况;他们不能用来搜索`#include <file>’包含的头文件.
<BR>如果用`-I’选项指定的搜索路径位于`-I-’选项后面,就可以在这些路径中搜索所有的 `#include’指令. (一般说来-I选项就是这么用的.)
<BR><BR>还有, `-I-’选项能够阻止当前目录(存放当前输入文件的地方)成为搜索`#include "file"’的第一选择.没有办法克服`-I-’选项的这个效应.你可以指定 `-I.’搜索那个目录,它在调用编译器时是当前目录.这和预处理器的默认行为不完全一样,但是结果通常 令人满意.
<BR><BR>`-I-’不影响使用系统标准目录,因此, `-I-’和`-nostdinc’是不同的选项.
<BR><BR><BR>-Ldir <BR>在`-l’选项的搜索路径列表中添加dir目录.
<BR><BR>-Bprefix <BR>这个选项指出在何处寻找可执行文件,库文件,以及编译器自己的数据文件.
<BR>编译器驱动程序需要执行某些下面的子程序: `cpp’, `cc1’ (或C++的 `cc1plus’), `as’和`ld’.他把prefix当作欲执行的程序的 前缀,既可以包括也可以不包括`machine/version/’.
<BR><BR>对于要运行的子程序,编译器驱动程序首先试着加上`-B’前缀(如果存在).如果没有找到文件,或没有指定 `-B’选项,编译器接着会试验两个标准前缀`/usr/lib/gcc/’和 `/usr/local/lib/gcc-lib/’.如果仍然没能够找到所需文件,编译器就在`PATH’环境变量 指定的路径中寻找没加任何前缀的文件名.
<BR><BR>如果有需要,运行时(run-time)支持文件`libgcc.a’也在`-B’前缀的搜索范围之内. 如果这里没有找到,就在上面提到的两个标准前缀中寻找,仅此而已.如果上述方法没有找到这个文件,就不连接他了.多数 情况的多数机器上, `libgcc.a’并非必不可少.
<BR><BR>你可以通过环境变量GCC_EXEC_PREFIX获得近似的效果;如果定义了这个变量,其值就和上面说的 一样用做前缀.如果同时指定了`-B’选项和GCC_EXEC_PREFIX变量,编译器首先使用 `-B’选项,然后才尝试环境变量值.
<BR><BR><BR> <BR>警告选项(WARNING OPTION)
<BR>警告是针对程序结构的诊断信息,程序不一定有错误,而是存在风险,或者可能存在 错误.
<BR>下列选项控制GNU CC产生的警告的数量和类型: <BR><BR><BR>-fsyntax-only
<BR>检查程序中的语法错误,但是不产生输出信息. <BR>-w <BR>禁止所有警告信息.
<BR>-Wno-import <BR>禁止所有关于#import的警告信息. <BR>-pedantic
<BR>打开完全服从ANSI C标准所需的全部警告诊断;拒绝接受采用了被禁止的语法扩展的程序.
<BR>无论有没有这个选项,符合ANSI C标准的程序应该能够被正确编译(虽然极少数程序需要`-ansi’ 选项).然而,如果没有这个选项,某些GNU扩展和传统C特性也得到支持.使用这个选项可以拒绝这些程序.没有理由 使用这个选项,他存在只是为了满足一些书呆子(pedant).
<BR><BR>对于替选关键字(他们以`__’开始和结束) `-pedantic’不会产生警告信息. Pedantic 也不警告跟在__extension__后面的表达式.不过只应该在系统头文件中使用这种转义措施,应用程序最好 避免.
<BR><BR>-pedantic-errors <BR>该选项和`-pedantic’类似,但是显示错误而不是警告.
<BR>-W <BR>对下列事件显示额外的警告信息: <BR> *
<BR>非易变自动变量(nonvolatile automatic variable)可能在调用longjmp时发生改变. 这些警告仅在优化编译时发生.
<BR>编译器只知道对setjmp的调用,他不可能知道会在哪里调用longjmp,事实上一个 信号处理例程可以在程序的任何地点调用他.其结果是,即使程序没有问题,你也可能会得到警告,因为无法在可能出现问题 的地方调用longjmp.
<BR><BR><BR> *
<BR>既可以返回值,也可以不返回值的函数. (缺少结尾的函数体被看作不返回函数值)例如,下面的函数将导致这种警告:
<BR><BR>foo (a) <BR>{ <BR> if (a > 0)
<BR> return a; <BR>}
<BR><BR><BR><BR>由于GNU CC不知道某些函数永不返回(含有abort和longjmp),因此有可能出现 虚假警告.
<BR><BR> *
<BR>表达式语句或逗号表达式的左侧没有产生作用(side effect).如果要防止这种警告,应该把未使用的表达式强制转换 为void类型.例如,这样的表达式`x[i,j]’会导致警告,而`x[(void)i,j]’就不会.
<BR><BR> * <BR>无符号数用`>’或`<=’和零做比较.
<BR><BR><BR>-Wimplicit-int <BR>警告没有指定类型的声明.
<BR><BR>-Wimplicit-function-declaration <BR>警告在声明之前就使用的函数.
<BR><BR>-Wimplicit
<BR>同-Wimplicit-int和-Wimplicit-function-declaration.
<BR><BR>-Wmain
<BR>如果把main函数声明或定义成奇怪的类型,编译器就发出警告.典型情况下,这个函数用于外部连接, 返回int数值,不需要参数,或指定两个参数.
<BR><BR>-Wreturn-type
<BR>如果函数定义了返回类型,而默认类型是int型,编译器就发出警告.同时警告那些不带返回值的 return语句,如果他们所属的函数并非void类型.
<BR><BR>-Wunused
<BR>如果某个局部变量除了声明就没再使用,或者声明了静态函数但是没有定义,或者某条语句的运算结果显然没有使用, 编译器就发出警告.
<BR><BR>-Wswitch
<BR>如果某条switch语句的参数属于枚举类型,但是没有对应的case语句使用枚举元素,编译器 就发出警告. ( default语句的出现能够防止这个警告.)超出枚举范围的case语句同样会 导致这个警告.
<BR><BR>-Wcomment <BR>如果注释起始序列`/*’出现在注释中,编译器就发出警告.
<BR><BR>-Wtrigraphs <BR>警告任何出现的trigraph (假设允许使用他们).
<BR><BR>-Wformat <BR>检查对printf和scanf等函数的调用,确认各个参数类型和格式串中的一致.
<BR><BR>-Wchar-subscripts
<BR>警告类型是char的数组下标.这是常见错误,程序员经常忘记在某些机器上char有符号.
<BR><BR>-Wuninitialized <BR>在初始化之前就使用自动变量.
<BR>这些警告只可能做优化编译时出现,因为他们需要数据流信息,只有做优化的时候才估算数据流信息.如果不指定 `-O’选项,就不会出现这些警告.
<BR><BR>这些警告仅针对等候分配寄存器的变量.因此不会发生在声明为volatile的变量上面,不会发生在已经 取得地址的变量,或长度不等于1, 2, 4, 8字节的变量.同样也不会发生在结构,联合或数组上面,即使他们在 寄存器中.
<BR><BR>注意,如果某个变量只计算了一个从未使用过的值,这里可能不会警告.因为在显示警告之前,这样的计算已经被 数据流分析删除了.
<BR><BR>这些警告作为可选项是因为GNU CC还没有智能到判别所有的情况,知道有些看上去错误的代码其实是正确的.下面是 一个这样的例子:
<BR><BR><BR>{ <BR> int x; <BR> switch (y)
<BR> {
<BR> case 1: x = 1;
<BR> break;
<BR> case 2: x = 4;
<BR> break;
<BR> case 3: x = 5;
<BR> } <BR> foo (x); <BR>}
<BR><BR><BR><BR>如果y始终是1, 2或3,那么x总会被初始化,但是GNU CC不知道这一点.下面是 另一个普遍案例:
<BR><BR>{ <BR> int save_y;
<BR> if (change_y) save_y = y, y = new_y;
<BR> ...
<BR> if (change_y) y = save_y; <BR>}
<BR><BR><BR><BR>这里没有错误,因为只有设置了save_y才使用他.
<BR>把所有不返回的函数定义为volatile可以避免某些似是而非的警告. <BR><BR><BR></P>
<DIV
style="FONT-SIZE: 12px; WIDTH: 100%; FONT-FAMILY: Courier 宋体; TEXT-ALIGN: center"><SPAN
class=gray>[1]</SPAN> <A
href="http://21ic.com/news/n5203c79p2.aspx">[2]</A> <A
href="http://21ic.com/news/n5203c79p3.aspx">[3]</A> <A
href="http://21ic.com/news/n5203c79p2.aspx">下一页</A> </DIV>
<SCRIPT event=onload for=window type=text/javascript>ImgLoad(document.getElementById("BodyLabel"));</SCRIPT>
</DIV><BR><BR>
<TABLE id=dlPages style="WIDTH: 95%; BORDER-COLLAPSE: collapse"
cellSpacing=0 align=center border=0>
<TBODY>
<TR>
<TD style="HEIGHT: 20px" colSpan=2>【内容导航】 </TD></TR>
<TR>
<TD style="WIDTH: 50%; HEIGHT: 20px">第1页:<A class=highlight
href="http://21ic.com/news/n5203c79.aspx">GCC 中文手册</A> </TD>
<TD style="WIDTH: 50%; HEIGHT: 20px">第2页:<A
href="http://21ic.com/news/n5203c79p2.aspx">GCC 中文手册(中)</A> </TD></TR>
<TR>
<TD style="WIDTH: 50%; HEIGHT: 20px">第3页:<A
href="http://21ic.com/news/n5203c79p3.aspx">GCC 中文手册(下)</A>
</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="97%">
<TBODY>
<TR>
<TD align=right>
<TABLE>
<TBODY>
<TR>
<TD>阅读:<SPAN id=HitsLabel>198</SPAN> 次<BR>录入:<SPAN
id=MemberNameLabel><A
href="http://21ic.com/news/memberProfile.aspx?id=10"
target=_blank>录入员001</A></SPAN><BR><BR></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=right>【 <A href="http://21ic.com/news/remark.aspx?ID=5203"
target=_blank>评论</A> 】 【 <A
href="http://21ic.com/news/mail.aspx?ID=5203" target=_blank>推荐</A> 】
</TD></TR></TBODY></TABLE></TD>
<TD class=mr></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV class=mframe>
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD class=tl></TD>
<TD class=tm><A style="CURSOR: hand"
href="http://21ic.com/news/search.aspx?Where=Nkey&Keyword=GCC"><SPAN
class=tt>相关资料 连接</SPAN></A> </TD>
<TD class=tr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -