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

📄 gcc 中文手册.htm

📁 linux/unix下面使用GCC编译工具的一个很好的指导电子书籍
💻 HTM
📖 第 1 页 / 共 5 页
字号:
dir<BR><BR>把目录添加到第二包含路径中.目录名由prefix和dir合并而成,这里 
prefix被先前<BR>的`-iprefix'选项指定.<BR><BR>-nostdinc<BR><BR>不要在标准系统目录中寻找头文件.只搜索`-I'选项指定的目录(以及当前目录,如果<BR>合适).<BR><BR>结合使用`-nostdinc'和`-I-'选项,你可以把包含文件搜索限制在显式指定的目录.<BR><BR><BR>-nostdinc++<BR><BR>不要在C++专用标准目录中寻找头文件,但是仍然搜索其他标准目录. 
(当建立`libg<BR>++'时使用 这个选项.)<BR><BR>-undef<BR><BR>不要预定义任何非标准宏. 
(包括系统结构标志).<BR><BR>-E<BR><BR>仅运行C预处理器.预处理所有指定的C源文件,结果送往标准输出或指定的输出文件<BR><BR><BR>-C<BR><BR>告诉预处理器不要丢弃注释.配合`-E'选项使用.<BR><BR>-P<BR><BR>告诉预处理器不要产生`#line'命令.配合`-E'选项使用.<BR><BR>-M 
[ -MG ]<BR><BR>告诉预处理器输出一个适合make的规则,用于描述各目标文件的依赖关系.对于每个<BR>源文件,预处理器输出 
一个make规则,该规则的目标项(target)是源文件对应的目标<BR>文件名,依赖项(dependency)是源文件中 
`#include引用的所有文件.生成的规则可<BR>以是单行,但如果太长,就用`\'-换行符续成多行.规则 
显示在标准输出,不产生预处<BR>理过的C程序.<BR><BR>`-M'隐含了`-E'选项.<BR><BR>`-MG'要求把缺失的头文件按存在对待,并且假定他们和源程序文件在同一目录下.必<BR>须和 
`-M'选项一起用.<BR><BR>-MM [ -MG ]<BR><BR>和`-M'选项类似,但是输出结果仅涉及用户头文件,象这样`#include 
file"'.忽略系<BR>统头文件如`#include 
&lt;file&gt;'.<BR><BR>-MD<BR><BR>和`-M'选项类似,但是把依赖信息输出在文件中,文件名通过把输出文件名末尾的`.<BR>o'替换为 
`.d'产生.同时继续指定的编译工作---`-MD'不象`-M'那样阻止正常的编<BR>译任务.<BR><BR>Mach的实用工具`md'能够合并`.d'文件,产生适用于`make'命令的单一的 
依赖文件<BR><BR><BR>-MMD<BR><BR>和`-MD'选项类似,但是输出结果仅涉及用户头文件,忽略系统头文件.<BR><BR>-H<BR><BR>除了其他普通的操作, 
GCC显示引用过的头文件名.<BR><BR>-Aquestion(answer)<BR><BR>如果预处理器做条件测试,如`#if 
#question(answer)',该选项可以断言(Assert)<BR>question的答案是answer. 
-A-'关闭一般用于描述目标机的标准断言.<BR><BR>-Dmacro<BR><BR>定义宏macro,宏的内容定义为字符串`1'.<BR><BR>-Dmacro=defn<BR><BR>定义宏macro的内容为defn.命令行上所有的`-D'选项在 
`-U'选项之前处理.<BR><BR>-Umacro<BR><BR>取消宏macro. `-U'选项在所有的`-D'选项之后处理,但是优先于任何 
`-include'或<BR>`-imacros'选项.<BR><BR>-dM<BR><BR>告诉预处理器输出有效的宏定义列表(预处理结束时仍然有效的宏定义).该选项需结<BR>合`-E'选项使用.<BR><BR>-dD<BR><BR>告诉预处理器把所有的宏定义传递到输出端,按照出现的顺序显示.<BR><BR>-dN<BR><BR>和`-dD'选项类似,但是忽略宏的参量或内容.只在输出端显示`#define 
name.<BR><BR><BR><BR>汇编器选项(ASSEMBLER 
OPTION)<BR><BR>-Wa,option<BR><BR>把选项option传递给汇编器.如果option含有逗号,就在逗号处分割成多个选项.<BR><BR><BR><BR>连接器选项(LINKER 
OPTION)<BR><BR>下面的选项用于编译器连接目标文件,输出可执行文件的时候.如果编译器不进行 
连<BR>接,他们就毫无意义.<BR><BR>object-file-name<BR><BR>如果某些文件没有特别明确的后缀a special 
recognized suffix, GCC就认为他们<BR>是目标文件或库文件. 
(根据文件内容,连接器能够区分目标文件和库文件).如果GC<BR>C执行连接操作,这些目标文件将成为连接器的输入文件.<BR><BR>-llibrary<BR><BR>连接名为library的库文件.<BR><BR>连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`liblibrary.a'.连<BR>接器会 
当做文件名得到准确说明一样引用这个文件.<BR><BR>搜索目录除了一些系统标准目录外,还包括用户以`-L'选项指定的路径.<BR><BR>一般说来用这个方法找到的文件是库文件---即由目标文件组成的归档文件(archiv<BR>e 
file).连接器处理归档文件的 方法是:扫描归档文件,寻找某些成员,这些成员的<BR>符号目前已被引用,不过还没有被定义.但是,如果连接器找到普通的 
目标文件,而不<BR>是库文件,就把这个目标文件按平常方式连接进来.指定`-l'选项和指定文件名的唯<BR>一区别是, 
`-l选项用`lib'和`.a'把library包裹起来,而且搜索一些目录.<BR><BR>-lobjc<BR><BR>这个-l选项的特殊形式用于连接Objective 
C程序.<BR><BR>-nostartfiles<BR><BR>不连接系统标准启动文件,而标准库文件仍然正常使用.<BR><BR>-nostdlib<BR><BR>不连接系统标准启动文件和标准库文件.只把指定的文件传递给连接器.<BR><BR>-static<BR><BR>在支持动态连接(dynamic 
linking)的系统上,阻止连接共享库.该选项在其他系统上<BR>无效.<BR><BR>-shared<BR><BR>生成一个共享目标文件,他可以和其他目标文件连接产生可执行文件.只有部分系统<BR>支持该选项.<BR><BR>-symbolic<BR><BR>建立共享目标文件的时候,把引用绑定到全局符号上.对所有无法解析的引用作出警<BR>告(除非用连接编辑选项 
`-Xlinker -z -Xlinker defs'取代).只有部分系统支持该<BR>选项.<BR><BR>-Xlinker 
option<BR><BR>把选项option传递给连接器.可以用他传递系统特定的连接选项, GNU 
CC无法识别这<BR>些选项.<BR><BR>如果需要传递携带参数的选项,你必须使用两次`-Xlinker',一次传递选项,另一次传<BR>递他的参数. 
例如,如果传递`-assert definitions',你必须写成`-Xlinker -asse<BR>rt -Xlinker 
definitions',而不能写成`-Xlinker "-assert definitions"',因为<BR>这样会把整个 
字符串当做一个参数传递,显然这不是连接器期待的.<BR><BR>-Wl,option<BR><BR>把选项option传递给连接器.如果option中含有逗号,就在逗号处分割成多个选项.<BR><BR><BR>-u 
symbol<BR><BR>使连接器认为取消了symbol的符号定义,从而连接库模块以取得定义.你可以使用多<BR>个 
`-u'选项,各自跟上不同的符号,使得连接器调入附加的库模块.<BR><BR><BR><BR>目录选项(DIRECTORY 
OPTION)<BR><BR>下列选项指定搜索路径,用于查找头文件,库文件,或编译器的某些成员:<BR><BR>-Idir<BR><BR>在头文件的搜索路径列表中添加dir 
目录.<BR><BR>-I-<BR><BR>任何在`-I-'前面用`-I'选项指定的搜索路径只适用于`#include 
"file"'这种情况<BR>;他们不能用来搜索`#include 
&lt;file&gt;'包含的头文件.<BR><BR>如果用`-I'选项指定的搜索路径位于`-I-'选项后面,就可以在这些路径中搜索所有<BR>的 
`#include'指令. (一般说来-I选项就是这么用的.)<BR><BR>还有, 
`-I-'选项能够阻止当前目录(存放当前输入文件的地方)成为搜索`#include<BR>"file"'的第一选择.没有办法克服`-I-'选项的这个效应.你可以指定 
`-I.'搜索那<BR>个目录,它在调用编译器时是当前目录.这和预处理器的默认行为不完全一样,但是结<BR>果通常 
令人满意.<BR><BR>`-I-'不影响使用系统标准目录,因此, 
`-I-'和`-nostdinc'是不同的选项.<BR><BR>-Ldir<BR><BR>在`-l'选项的搜索路径列表中添加dir目录.<BR><BR>-Bprefix<BR><BR>这个选项指出在何处寻找可执行文件,库文件,以及编译器自己的数据文件.<BR><BR>编译器驱动程序需要执行某些下面的子程序: 
`cpp', `cc1' (或C++的 `cc1plus')<BR>, `as'和`ld'.他把prefix当作欲执行的程序的 
前缀,既可以包括也可以不包括`ma<BR>chine/version/'.<BR><BR>对于要运行的子程序,编译器驱动程序首先试着加上`-B'前缀(如果存在).如果没有<BR>找到文件,或没有指定 
`-B'选项,编译器接着会试验两个标准前缀`/usr/lib/gcc/'<BR>和 
`/usr/local/lib/gcc-lib/'.如果仍然没能够找到所需文件,编译器就在`PATH'<BR>环境变量 
指定的路径中寻找没加任何前缀的文件名.<BR><BR>如果有需要,运行时(run-time)支持文件`libgcc.a'也在`-B'前缀的搜索范围之内.<BR>如果这里没有找到,就在上面提到的两个标准前缀中寻找,仅此而已.如果上述方法<BR>没有找到这个文件,就不连接他了.多数 
情况的多数机器上, 
`libgcc.a'并非必不可<BR>少.<BR><BR>你可以通过环境变量GCC_EXEC_PREFIX获得近似的效果;如果定义了这个变量,其值就<BR>和上面说的 
一样用做前缀.如果同时指定了`-B'选项和GCC_EXEC_PREFIX变量,编译<BR>器首先使用 
`-B'选项,然后才尝试环境变量值.<BR><BR><BR><BR>警告选项(WARNING 
OPTION)<BR><BR>警告是针对程序结构的诊断信息,程序不一定有错误,而是存在风险,或者可能存在<BR>错误.<BR><BR>下列选项控制GNU 
CC产生的警告的数量和类型:<BR><BR>-fsyntax-only<BR><BR>检查程序中的语法错误,但是不产生输出信息.<BR><BR>-w<BR><BR>禁止所有警告信息.<BR><BR>-Wno-import<BR><BR>禁止所有关于#import的警告信息.<BR><BR>-pedantic<BR><BR>打开完全服从ANSI 
C标准所需的全部警告诊断;拒绝接受采用了被禁止的语法扩展的<BR>程序.<BR><BR>无论有没有这个选项,符合ANSI 
C标准的程序应该能够被正确编译(虽然极少数程序<BR>需要`-ansi' 
选项).然而,如果没有这个选项,某些GNU扩展和传统C特性也得到支持<BR>使用这个选项可以拒绝这些程序.没有理由 
使用这个选项,他存在只是为了满足一<BR>些书呆子(pedant).<BR><BR>对于替选关键字(他们以`__'开始和结束) 
`-pedantic'不会产生警告信息. Pedant<BR>ic 
也不警告跟在__extension__后面的表达式.不过只应该在系统头文件中使用这种<BR>转义措施,应用程序最好 
避免.<BR><BR>-pedantic-errors<BR><BR>该选项和`-pedantic'类似,但是显示错误而不是警告.<BR><BR>-W<BR><BR>对下列事件显示额外的警告信息:<BR><BR>*<BR><BR>非易变自动变量(nonvolatile 
automatic 
variable)可能在调用longjmp时发生改变<BR>这些警告仅在优化编译时发生.<BR><BR>编译器只知道对setjmp的调用,他不可能知道会在哪里调用longjmp,事实上一个 
信<BR>号处理例程可以在程序的任何地点调用他.其结果是,即使程序没有问题,你也可能会<BR>得到警告,因为无法在可能出现问题 
的地方调用longjmp.<BR><BR>*<BR><BR>既可以返回值,也可以不返回值的函数. 
(缺少结尾的函数体被看作不返回函数值)例<BR>如,下面的函数将导致这种警告:<BR><BR>foo (a)<BR><BR>{<BR><BR>if (a 
&gt; 0)<BR><BR>return a;<BR><BR>}<BR><BR>由于GNU 
CC不知道某些函数永不返回(含有abort和longjmp),因此有可能出现 
虚假<BR>警告.<BR><BR>*<BR><BR>表达式语句或逗号表达式的左侧没有产生作用(side 
effect).如果要防止这种警告<BR>,应该把未使用的表达式强制转换 
为void类型.例如,这样的表达式`x[i,j]'会导致<BR>警告,而`x[(void)i,j]'就不会.<BR><BR>*<BR><BR>无符号数用`&gt;'或`&lt;='和零做比较.<BR><BR>-Wimplicit-int<BR><BR>警告没有指定类型的声明.<BR><BR>-Wimplicit-function-declaration<BR><BR>警告在声明之前就使用的函数.<BR><BR>-Wimplicit<BR><BR>同-Wimplicit-int和-Wimplicit-function-declaration.<BR><BR>-Wmain<BR><BR>如果把main函数声明或定义成奇怪的类型,编译器就发出警告.典型情况下,这个函数<BR>用于外部连接, 
返回int数值,不需要参数,或指定两个参数.<BR><BR>-Wreturn-type<BR><BR>如果函数定义了返回类型,而默认类型是int型,编译器就发出警告.同时警告那些不<BR>带返回值的 
return语句,如果他们所属的函数并非void类型.<BR><BR>-Wunused<BR><BR>如果某个局部变量除了声明就没再使用,或者声明了静态函数但是没有定义,或者某<BR>条语句的运算结果显然没有使用, 
编译器就发出警告.<BR><BR>-Wswitch<BR><BR>如果某条switch语句的参数属于枚举类型,但是没有对应的case语句使用枚举元素,<BR>编译器 
就发出警告. ( default语句的出现能够防止这个警告.)超出枚举范围的ca<BR>se语句同样会 
导致这个警告.<BR><BR>-Wcomment<BR><BR>如果注释起始序列`/*'出现在注释中,编译器就发出警告.<BR><BR>-Wtrigraphs<BR><BR>警告任何出现的trigraph 
(假设允许使用他们).<BR><BR>-Wformat<BR><BR>检查对printf和scanf等函数的调用,确认各个参数类型和格式串中的一致.<BR><BR>-Wchar-subscripts<BR><BR>警告类型是char的数组下标.这是常见错误,程序员经常忘记在某些机器上char有符<BR>号.<BR><BR>-Wuninitialized<BR><BR>在初始化之前就使用自动变量.<BR><BR>这些警告只可能做优化编译时出现,因为他们需要数据流信息,只有做优化的时候才<BR>估算数据流信息.如果不指定 
`-O'选项,就不会出现这些警告.<BR><BR>这些警告仅针对等候分配寄存器的变量.因此不会发生在声明为volatile的变量上面<BR>,不会发生在已经 
取得地址的变量,或长度不等于1, 2, 4, 8字节的变量.同样也不<BR>会发生在结构,联合或数组上面,即使他们在 
寄存器中.<BR><BR>注意,如果某个变量只计算了一个从未使用过的值,这里可能不会警告.因为在显示警<BR>告之前,这样的计算已经被 
数据流分析删除了.<BR><BR>这些警告作为可选项是因为GNU CC还没有智能到判别所有的情况,知道有些看上去错<BR>误的代码其实是正确的.下面是 
一个这样的例子:<BR><BR>{<BR><BR>int x;<BR><BR>switch (y)<BR><BR>{<BR><BR>case 1: x = 
1;<BR><BR>break;<BR><BR>case 2: x = 4;<BR><BR>break;<BR><BR>case 3: x = 
5;<BR><BR>}<BR><BR>foo (x);<BR><BR>}<BR><BR>如果y始终是1, 2或3,那么x总会被初始化,但是GNU 
CC不知道这一点.下面是 另一个<BR>普遍案例:<BR><BR>{<BR><BR>int save_y;<BR><BR>if (change_y) 

⌨️ 快捷键说明

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