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

📄 gcc中文手册1.htm

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