<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無(wú)為

    無(wú)為則可為,無(wú)為則至深!

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

    GCC

    Section: GNU Tools (1)
    Updated: 2003/12/05
    IndexReturn to Main Contents

    ?

    ?

    NAME

    gcc,g++-GNU 工程的 C C++ 編譯器 (egcs-1.1.2) ?

    總覽 (SYNOPSIS)

    gcc[option|filename ]...
    g++[option|filename ]...

    警告 (WARNING)

    本手冊(cè)頁(yè)內(nèi)容摘自 GNU C 編譯器的完整文檔 , 僅限于解釋選項(xiàng)的含義 .

    除非有人自愿維護(hù) , 否則本手冊(cè)頁(yè)不再更新 . 如果發(fā)現(xiàn)手冊(cè)頁(yè)和軟件之間有所矛盾 , 請(qǐng)查對(duì) Info 文件 , Info 文件是權(quán)威文檔 .

    如果我們發(fā)覺(jué)本手冊(cè)頁(yè)的內(nèi)容由于過(guò)時(shí)而導(dǎo)致明顯的混亂和抱怨時(shí) , 我們就停止發(fā)布它 . 不可能有其他選擇 , 象更新 Info 文件同時(shí)更新 man 手冊(cè) , 因?yàn)槠渌S護(hù) GNU CC 的工作沒(méi)有留給我們時(shí)間做這個(gè) . GNU 工程認(rèn)為 man 手冊(cè)是過(guò)時(shí)產(chǎn)物 , 應(yīng)該把時(shí)間用到別的地方 .

    如果需要完整和最新的文檔 , 請(qǐng)查閱 Info 文件 `gcc' Using and Porting GNU CC (for version 2.0) ( 使用和移植 GNU CC 2.0) 手冊(cè) . 二者均來(lái)自 Texinfo 原文件 gcc.texinfo.

    描述 (DESCRIPTION)

    C C++ 編譯器是集成的 . 他們都要用四個(gè)步驟中的一個(gè)或多個(gè)處理輸入文件 : 預(yù)處理 (preprocessing), 編譯 (compilation), 匯編 (assembly) 和連接 (linking). 源文件后綴名標(biāo)識(shí)源文件的 語(yǔ)言 , 但是對(duì)編譯器來(lái)說(shuō) , 后綴名控制著缺省設(shè)定 :

    gcc
    認(rèn)為預(yù)處理后的文件 (.i) C 文件 , 并且設(shè)定 C 形式的連接 .
    g++
    認(rèn)為預(yù)處理后的文件 (.i) C++ 文件 , 并且設(shè)定 C++ 形式的連接 .

    源文件后綴名指出語(yǔ)言種類以及后期的操作 :

    ?

    				
    						.c      C
    				源程序
    				;
    				預(yù)處理
    				,
    				編譯
    				,
    				匯編
    				
    						.C      C++
    				源程序
    				;
    				預(yù)處理
    				,
    				編譯
    				,
    				匯編
    				
    						.cc     C++
    				源程序
    				;
    				預(yù)處理
    				,
    				編譯
    				,
    				匯編
    				
    						.cxx    C++
    				源程序
    				;
    				預(yù)處理
    				,
    				編譯
    				,
    				匯編
    				
    						.m      Objective-C
    				源程序
    				;
    				預(yù)處理
    				,
    				編譯
    				,
    				匯編
    				
    						.i
    				
    				預(yù)處理后的
    				C
    				文件
    				;
    				編譯
    				,
    				匯編
    				
    						.ii
    				
    				預(yù)處理后的
    				C++
    				文件
    				;
    				編譯
    				,
    				匯編
    				
    						.s
    				
    				匯編語(yǔ)言源程序
    				;
    				匯編
    				
    						.S
    				
    				匯編語(yǔ)言源程序
    				;
    				預(yù)處理
    				,
    				匯編
    				
    						.h
    				
    				預(yù)處理器文件
    				;
    				通常不出現(xiàn)在命令行上
    		

    其他后綴名的文件被傳遞給連接器 (linker). 通常包括 :

    ?

    				
    						.o
    				
    				目標(biāo)文件
    				(Object file).a
    				歸檔庫(kù)文件
    				(Archive file)
    		

    除非使用了 -c, -S, -E 選項(xiàng) ( 或者編譯錯(cuò)誤阻止了完整的過(guò)程 ), 否則連接總是 最后的步驟 . 在連接階段中 , 所有對(duì)應(yīng)于源程序的 .o 文件 , -l 庫(kù)文件 , 無(wú)法識(shí)別的文件名 ( 包括指定的 .o 目標(biāo)文件和 .a 庫(kù)文件 ) 按命令行中的順序傳遞給連接器 .

    選項(xiàng) (OPTIONS)

    選項(xiàng)必須分立給出 : `-dr' 完全不同于 `-d -r '.

    大多數(shù) `-f' `-W' 選項(xiàng)有兩個(gè)相反的格式 : -fname -fno- name ( -W name -Wno- name). 這里 只列舉不是默認(rèn)選項(xiàng)的格式 .

    下面是所有選項(xiàng)的摘要 , 按類型分組 , 解釋放在后面的章節(jié)中 .

    總體選項(xiàng) (Overall Option)

    -c -S -E -o file -pipe -v -x language
    語(yǔ)言選項(xiàng) (Language Option)
    -ansi -fall-virtual -fcond-mismatch -fdollars-in-identifiers -fenum-int-equiv -fexternal-templates -fno-asm -fno-builtin -fhosted -fno-hosted -ffreestanding -fno-freestanding -fno-strict-prototype -fsigned-bitfields -fsigned-char -fthis-is-variable -funsigned-bitfields -funsigned-char -fwritable-strings -traditional -traditional-cpp -trigraphs
    警告選項(xiàng) (Warning Option)
    -fsyntax-only -pedantic -pedantic-errors -w -W -Wall -Waggregate-return -Wcast-align -Wcast-qual -Wchar-subscript -Wcomment -Wconversion -Wenum-clash -Werror -Wformat -Wid-clash-len -Wimplicit -Wimplicit-int -Wimplicit-function-declaration -Winline -Wlong-long -Wmain -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-import -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch -Wtemplate-debugging -Wtraditional -Wtrigraphs -Wuninitialized -Wunused -Wwrite-strings
    調(diào)試選項(xiàng) (Debugging Option)
    -a -dletters -fpretend-float -g -glevel -gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ -ggdb -p -pg -save-temps -print-file-name=library -print-libgcc-file-name -print-prog-name=program
    優(yōu)化選項(xiàng) (Optimization Option)
    -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks -fdelayed-branch -felide-constructors -fexpensive-optimizations -ffast-math -ffloat-store -fforce-addr -fforce-mem -finline-functions -fkeep-inline-functions -fmemoize-lookups -fno-default-inline -fno-defer-pop -fno-function-cse -fno-inline -fno-peephole -fomit-frame-pointer -frerun-cse-after-loop -fschedule-insns -fschedule-insns2 -fstrength-reduce -fthread-jumps -funroll-all-loops -funroll-loops -O -O2 -O3
    預(yù)處理器選項(xiàng) (Preprocessor Option)
    -Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H -idirafter dir -include file -imacros file -iprefix file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P -Umacro -undef
    匯編器選項(xiàng) (Assembler Option)
    -Wa,option
    連接器選項(xiàng) (Linker Option)
    -llibrary -nostartfiles -nostdlib -static -shared -symbolic -Xlinker?option -Wl,option -u symbol
    目錄選項(xiàng) (Directory Option)
    -Bprefix -Idir -I- -Ldir
    目標(biāo)機(jī)選項(xiàng) (Target Option)
    -b machine -V version
    配置相關(guān)選項(xiàng) (Configuration Dependent Option)
    M680x0? 選項(xiàng)
    -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881 -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield -mrtd -mshort -msoft-float

    VAX 選項(xiàng)
    -mg -mgnu -munix

    SPARC 選項(xiàng)
    -mepilogue -mfpu -mhard-float -mno-fpu -mno-epilogue -msoft-float -msparclite -mv8 -msupersparc -mcypress

    Convex 選項(xiàng)
    -margcount -mc1 -mc2 -mnoargcount

    AMD29K 選項(xiàng)
    -m29000 -m29050 -mbw -mdw -mkernel-registers -mlarge -mnbw -mnodw -msmall -mstack-check -muser-registers

    M88K 選項(xiàng)
    -m88000 -m88100 -m88110 -mbig-pic -mcheck-zero-division -mhandle-large-shift -midentify-revision -mno-check-zero-division -mno-ocs-debug-info -mno-ocs-frame-position -mno-optimize-arg-area -mno-serialize-volatile -mno-underscores -mocs-debug-info -mocs-frame-position -moptimize-arg-area -mserialize-volatile -mshort-data-num -msvr3 -msvr4 -mtrap-large-shift -muse-div-instruction -mversion-03.00 -mwarn-passed-structs

    RS6000 選項(xiàng)
    -mfp-in-toc -mno-fop-in-toc

    RT 選項(xiàng)
    -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs -mfull-fp-blocks -mhc-struct-return -min-line-mul -mminimum-fp-blocks -mnohc-struct-return

    MIPS 選項(xiàng)
    -mcpu=cpu type -mips2 -mips3 -mint64 -mlong64 -mmips-as -mgas -mrnames -mno-rnames -mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy -mno-memcpy -mno-mips-tfile -mmips-tfile -msoft-float -mhard-float -mabicalls -mno-abicalls -mhalf-pic -mno-half-pic -G num -nocpp

    i386 選項(xiàng)
    -m486 -mno-486 -msoft-float -mno-fp-ret-in-387

    HPPA 選項(xiàng)
    -mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs -mno-shared-libs -mlong-calls -mdisable-fpregs -mdisable-indexing -mtrailing-colon

    i960 選項(xiàng)
    -mcpu-type -mnumerics -msoft-float -mleaf-procedures -mno-leaf-procedures -mtail-call -mno-tail-call -mcomplex-addr -mno-complex-addr -mcode-align -mno-code-align -mic-compat -mic2.0-compat -mic3.0-compat -masm-compat -mintel-asm -mstrict-align -mno-strict-align -mold-align -mno-old-align

    DEC Alpha 選項(xiàng)
    -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float

    System V 選項(xiàng)
    -G -Qy -Qn -YP,paths -Ym,dir

    代碼生成選項(xiàng) (Code Generation Option)
    -fcall-saved-reg -fcall-used-reg -ffixed-reg -finhibit-size-directive -fnonnull-objects -fno-common -fno-ident -fno-gnu-linker -fpcc-struct-return -fpic -fPIC -freg-struct-return -fshared-data -fshort-enums -fshort-double -fvolatile -fvolatile-global -fverbose-asm

    ?

    總體選項(xiàng) (Overall Option)

    -x language
    明確指出后面輸入文件的語(yǔ)言為 language ( 而不是從文件名后綴得到的默認(rèn)選擇 ). 這個(gè)選項(xiàng)應(yīng)用于后面 所有的輸入文件 , 直到遇著下一個(gè) `-x' 選項(xiàng) . language 的可選值有 `c', `objective-c', `c-header', `c++', `cpp-output', `assembler', `assembler-with-cpp'.
    -x none
    關(guān)閉任何對(duì)語(yǔ)種的明確說(shuō)明 , 因此依據(jù)文件名后綴處理后面的文件 ( 就象是從未使用過(guò) `-x' 選項(xiàng) ).

    如果只操作四個(gè)階段 ( 預(yù)處理 , 編譯 , 匯編 , 連接 ) 中的一部分 , 可以使用 `-x' 選項(xiàng) ( 或文件名后綴 ) 告訴 gcc 從哪里開(kāi)始 , `-c', `-S', `-E' 選項(xiàng)告訴 gcc 到 哪里結(jié)束 . 注意 , 某些選項(xiàng)組合 ( 例如 , `-x cpp-output -E') 使 gcc 不作任何事情 .

    -c
    編譯或匯編源文件 , 但是不作連接 . 編譯器輸出對(duì)應(yīng)于源文件的目標(biāo)文件 .

    缺省情況下 , GCC 通過(guò)用 `.o' 替換源文件名后綴 `.c', `.i', `.s', 等等 , 產(chǎn)生目標(biāo)文件名 . 可以使用 -o 選項(xiàng)選擇其他名字 .

    GCC 忽略 -c 選項(xiàng)后面任何無(wú)法識(shí)別的輸入文件 ( 他們不需要編譯或匯編 ).

    -S
    編譯后即停止 , 不進(jìn)行匯編 . 對(duì)于每個(gè)輸入的非匯編語(yǔ)言文件 , 輸出文件是匯編語(yǔ)言文件 .

    缺省情況下 , GCC 通過(guò)用 `.o' 替換源文件名后綴 `.c', `.i', 等等 , 產(chǎn)生 目標(biāo)文件名 . 可以使用 -o 選項(xiàng)選擇其他名字 .

    GCC 忽略任何不需要編譯的輸入文件 .

    -E
    預(yù)處理后即停止 , 不進(jìn)行編譯 . 預(yù)處理后的代碼送往標(biāo)準(zhǔn)輸出 .

    GCC 忽略任何不需要預(yù)處理的輸入文件 .

    -o file
    指定輸出文件為 file. 該選項(xiàng)不在乎 GCC 產(chǎn)生什么輸出 , 無(wú)論是可執(zhí)行文件 , 目標(biāo)文件 , 匯編文件還是 預(yù)處理后的 C 代碼 .

    由于只能指定一個(gè)輸出文件 , 因此編譯多個(gè)輸入文件時(shí) , 使用 `-o' 選項(xiàng)沒(méi)有意義 , 除非輸出一個(gè)可執(zhí)行文件 .

    如果沒(méi)有使用 `-o' 選項(xiàng) , 默認(rèn)的輸出結(jié)果是 : 可執(zhí)行文件為 `a.out', `source.suffix ' 的目標(biāo)文件是 `source.o', 匯編文件是 `source.s', 而預(yù)處理后的 C 源代碼送往標(biāo)準(zhǔn)輸出 .

    -v
    ( 在標(biāo)準(zhǔn)錯(cuò)誤 ) 顯示執(zhí)行編譯階段的命令 . 同時(shí)顯示編譯器驅(qū)動(dòng)程序 , 預(yù)處理器 , 編譯器的版本號(hào) .
    -pipe
    在編譯過(guò)程的不同階段間使用管道而非臨時(shí)文件進(jìn)行通信 . 這個(gè)選項(xiàng)在某些系統(tǒng)上無(wú)法工作 , 因?yàn)槟切┫到y(tǒng)的 匯編器不能從管道讀取數(shù)據(jù) . GNU 的匯編器沒(méi)有這個(gè)問(wèn)題 .

    ?

    語(yǔ)言選項(xiàng) (LANGUAGE OPTIONS)

    下列選項(xiàng)控制編譯器能夠接受的 C " 方言 ":

    -ansi
    支持符合 ANSI 標(biāo)準(zhǔn)的 C 程序 .

    這樣就會(huì)關(guān)閉 GNU C 中某些不兼容 ANSI C 的特性 , 例如 asm, inline typeof 關(guān)鍵字 , 以及諸如 unix vax 這些表明當(dāng)前系統(tǒng)類型的預(yù)定義宏 . 同時(shí)開(kāi)啟 不受歡迎和極少使用的 ANSI trigraph 特性 , 以及禁止 `$' 成為標(biāo)識(shí)符的一部分 .

    ?

    盡管使用了 `-ansi' 選項(xiàng) , 下面這些可選的關(guān)鍵字 , __asm__, __extension__, __inline__ __typeof__ 仍然有效 . 你當(dāng)然不會(huì)把 他們用在 ANSI C 程序中 , 但可以把他們放在頭文件里 , 因?yàn)榫幾g包含這些頭文件的程序時(shí) , 可能會(huì)指定 `-ansi' 選項(xiàng) . 另外一些預(yù)定義宏 , __unix__ __vax__, 無(wú)論有沒(méi)有使用 `-ansi' 選項(xiàng) , 始終有效 .

    ?

    使用 `-ansi' 選項(xiàng)不會(huì)自動(dòng)拒絕編譯非 ANSI 程序 , 除非增加 `-pedantic' 選項(xiàng)作為 `-ansi' 選項(xiàng)的補(bǔ)充 .

    ?

    使用 `-ansi' 選項(xiàng)的時(shí)候 , 預(yù)處理器會(huì)預(yù)定義一個(gè) __STRICT_ANSI__ . 有些頭文件 關(guān)注此宏 , 以避免聲明某些函數(shù) , 或者避免定義某些宏 , 這些函數(shù)和宏不被 ANSI 標(biāo)準(zhǔn)調(diào)用 ; 這樣就不會(huì)干擾在其他地方 使用這些名字的程序了 .

    ?

    -fno-asm
    不把 asm, inline typeof 當(dāng)作關(guān)鍵字 , 因此這些詞可以用做標(biāo)識(shí)符 . __asm__, __inline__ __typeof__ 能夠替代他們 . `-ansi' 隱含聲明了 `-fno-asm'.
    -fno-builtin
    不接受不是兩個(gè)下劃線開(kāi)頭的內(nèi)建函數(shù) (built-in function). 目前受影響的函數(shù)有 _exit, abort, abs, alloca, cos, exit, fabs, labs, memcmp, memcpy, sin, sqrt, strcmp, strcpy, strlen.

    `-ansi' 選項(xiàng)能夠阻止 alloca _exit 成為內(nèi)建函數(shù) .

    ?

    -fhosted
    按宿主環(huán)境編譯 ; 他隱含聲明了 `-fbuiltin' 選項(xiàng) , 而且警告不正確的 main 函數(shù)聲明 .
    -ffreestanding
    按獨(dú)立環(huán)境編譯 ; 他隱含聲明了 `-fno-builtin' 選項(xiàng) , 而且對(duì) main 函數(shù)沒(méi)有特別要求 .

    ( 譯注 : 宿主環(huán)境 (hosted environment) 下所有的標(biāo)準(zhǔn)庫(kù)可用 , main 函數(shù)返回一個(gè) int , 典型例子是除了 內(nèi)核以外幾乎所有的程序 . 對(duì)應(yīng)的獨(dú)立環(huán)境 (freestanding environment) 不存在標(biāo)準(zhǔn)庫(kù) , 程序入口也不一定是 main, 最明顯的例子就是操作系統(tǒng)內(nèi)核 . 詳情參考 gcc 網(wǎng)站最近的資料 )

    ?

    -fno-strict-prototype
    對(duì)于沒(méi)有參數(shù)的函數(shù)聲明 , 例如 `int foo ();', C 風(fēng)格處理 --- 即不說(shuō)明參數(shù)個(gè)數(shù)或類型 . ( 僅針對(duì) C++). 正常情況下 , 這樣的函數(shù) foo C++ 中意味著參數(shù)為空 .

    ?

    -trigraphs
    支持 ANSI C trigraphs. `-ansi' 選項(xiàng)隱含聲明了 `-trigraphs'.

    ?

    -traditional
    試圖支持傳統(tǒng) C 編譯器的某些方面 . 詳見(jiàn) GNU C 手冊(cè) , 我們已經(jīng)把細(xì)節(jié)清單從這里刪除 , 這樣當(dāng)內(nèi)容過(guò)時(shí)后 , 人們也不會(huì) 埋怨我們 .

    除了一件事 : 對(duì)于 C++ 程序 ( 不是 C), `-traditional' 選項(xiàng)帶來(lái)一個(gè)附加效應(yīng) , 允許對(duì) this 賦值 . 他和 `-fthis-is-variable' 選項(xiàng)的效果一樣 .

    ?

    -traditional-cpp
    試圖支持傳統(tǒng) C 預(yù)處理器的某些方面 . 特別是上面提到有關(guān)預(yù)處理器的內(nèi)容 , 但是不包括 `-traditional' 選項(xiàng)的其他效應(yīng) .

    ?

    -fdollars-in-identifiers
    允許在標(biāo)識(shí)符 (identifier) 中使用 `$' 字符 ( 僅針對(duì) C++). 你可以指定 `-fno-dollars-in-identifiers' 選項(xiàng)顯明禁止使用 `$' . (GNU C++ 在某些 目標(biāo)系統(tǒng)缺省允許 `$' , 但不是所有系統(tǒng) .)

    ?

    -fenum-int-equiv
    允許 int 類型到枚舉類型 (enumeration) 的隱式轉(zhuǎn)換 ( 僅限于 C++). 正常情況下 GNU C++ 允許從 enum int 的轉(zhuǎn)換 , 反之則不行 .

    ?

    -fexternal-templates
    為模板聲明 (template declaration) 產(chǎn)生較小的代碼 ( 僅限于 C++), 方法是對(duì)于每個(gè)模板函數(shù) (template function), 只在定義他們的地方生成一個(gè)副本 . 想要成功使用這個(gè)選項(xiàng) , 你必須在所有使用模板的 文件中 , 標(biāo)記 `#pragma implementation' ( 定義 ) `#pragma interface' ( 聲明 ).

    當(dāng)程序用 `-fexternal-templates' 編譯時(shí) , 模板實(shí)例 (template instantiation) 全部是外部類型 . 你必須讓需要的實(shí)例在實(shí)現(xiàn)文件中出現(xiàn) . 可以通過(guò) typedef 實(shí)現(xiàn)這一點(diǎn) , 他引用所需的每個(gè) 實(shí)例 . 相對(duì)應(yīng)的 , 如果編譯時(shí)使用缺省選項(xiàng) `-fno-external-templates', 所有模板實(shí)例明確的設(shè)為內(nèi)置 .

    ?

    -fall-virtual
    所有可能的成員函數(shù)默認(rèn)為虛函數(shù) . 所有的成員函數(shù) ( 除了構(gòu)造子函數(shù)和 new delete 成員操作符 ) 視為所在類的虛函數(shù) .

    這不表明每次調(diào)用成員函數(shù)都將通過(guò)內(nèi)部虛函數(shù)表 . 有些情況下 , 編譯器能夠判斷出可以直接調(diào)用某個(gè)虛函數(shù) ; 這時(shí)就 直接調(diào)用 .

    ?

    -fcond-mismatch
    允許條件表達(dá)式的第二和第三個(gè)參數(shù)的類型不匹配 . 這種表達(dá)式的值是 void.

    ?

    -fthis-is-variable
    允許對(duì) this 賦值 ( 僅對(duì) C++). 合并用戶自定義的自由存儲(chǔ)管理機(jī)制到 C++ , 使可賦值的 `this' 顯得不合時(shí)宜 . 因此 , 默認(rèn)情況下 , 類成員函數(shù)內(nèi)部對(duì) this 賦值是無(wú)效操作 . 然而為了 向后兼容 , 你可以通過(guò) `-fthis-is-variable' 選項(xiàng)使這種操作有效 .

    ?

    -funsigned-char
    char 定義為無(wú)符號(hào)類型 , 如同 unsigned char.

    各種機(jī)器都有自己缺省的 char 類型 . 既可能是 unsigned char 也可能是 signed char .

    理想情況下 , 當(dāng)依賴于數(shù)據(jù)的符號(hào)性時(shí) , 一個(gè)可移植程序總是應(yīng)該使用 signed char unsigned char. 但是許多程序已經(jīng)寫成只用簡(jiǎn)單的 char, 并且期待這是有符號(hào)數(shù) ( 或者無(wú)符號(hào)數(shù) , 具體情況取決于 編寫程序的目標(biāo)機(jī)器 ). 這個(gè)選項(xiàng) , 和它的反義選項(xiàng) , 使那樣的程序工作在對(duì)應(yīng)的默認(rèn)值上 .

    char 的類型始終應(yīng)該明確定義為 signed char unsigned char, 即使 它表現(xiàn)的和其中之一完全一樣 .

    ?

    -fsigned-char
    char 定義為有符號(hào)類型 , 如同 signed char.

    這個(gè)選項(xiàng)等同于 `-fno-unsigned-char', 他是 the negative form of `-funsigned-char' 的相反選項(xiàng) . 同樣 , `-fno-signed-char' 等價(jià)于 `-funsigned-char'.

    ?

    -fsigned-bitfields
    -funsigned-bitfields
    -fno-signed-bitfields
    -fno-unsigned-bitfields
    如果沒(méi)有明確聲明 `signed' `unsigned' 修飾符 , 這些選項(xiàng)用來(lái)定義有符號(hào)位域 (bitfield) 或無(wú)符號(hào)位域 . 缺省情況下 , 位域是有符號(hào)的 , 因?yàn)樗麄兝^承的基本整數(shù)類型 , int, 是 有符號(hào)數(shù) .

    然而 , 如果指定了 `-traditional' 選項(xiàng) , 位域永遠(yuǎn)是無(wú)符號(hào)數(shù) .

    ?

    -fwritable-strings
    把字符串常量存儲(chǔ)到可寫數(shù)據(jù)段 , 而且不做特別對(duì)待 . 這是為了兼容一些老程序 , 他們假設(shè)字符串常量是可寫的 . `-traditional' 選項(xiàng)也有相同效果 .

    篡改字符串常量是一個(gè)非常糟糕的想法 ; `` 常量 '' 就應(yīng)該是常量 .

    ?

    預(yù)處理器選項(xiàng) (Preprocessor Option)

    下列選項(xiàng)針對(duì) C 預(yù)處理器 , 預(yù)處理器用在正式編譯以前 , 對(duì) C 源文件進(jìn)行某種處理 .

    如果指定了 `-E' 選項(xiàng) , GCC 只進(jìn)行預(yù)處理工作 . 下面的某些選項(xiàng)必須和 `-E' 選項(xiàng)一起才 有意義 , 因?yàn)樗麄兊妮敵鼋Y(jié)果不能用于編譯 .

    ?

    -include file
    在處理常規(guī)輸入文件之前 , 首先處理文件 file, 其結(jié)果是 , 文件 file 的內(nèi)容先得到編譯 . 命令行上任何 `-D' `-U' 選項(xiàng)永遠(yuǎn)在 `-include file' 之前處理 , 無(wú)論他們?cè)诿钚猩系捻樞蛉绾?/font> . 然而 `-include' `-imacros' 選項(xiàng)按書(shū)寫順序處理 .

    ?

    -imacros file
    在處理常規(guī)輸入文件之前 , 首先處理文件 file, 但是忽略輸出結(jié)果 . 由于丟棄了文件 file 的 輸出內(nèi)容 , `-imacros file' 選項(xiàng)的唯一效果就是使文件 file 中的宏定義生效 , 可以用于其他輸入文件 . 在處理 `-imacrosfile' 選項(xiàng)之前 , 預(yù)處理器首先處理 `-D' `-U' 選項(xiàng) , 并不在乎他們?cè)诿钚猩系捻樞?/font> . 然而 `-include' `-imacros' 選項(xiàng)按書(shū)寫順序處理 .

    ?

    -idirafter dir
    把目錄 dir 添加到第二包含路徑中 . 如果某個(gè)頭文件在主包含路徑 ( `-I' 添加的路徑 ) 中沒(méi)有 找到 , 預(yù)處理器就搜索第二包含路徑 .

    ?

    -iprefix prefix
    指定 prefix 作為后續(xù) `-iwithprefix' 選項(xiàng)的前綴 .

    ?

    -iwithprefix dir
    把目錄添加到第二包含路徑中 . 目錄名由 prefix dir 合并而成 , 這里 prefix 被先前的 `-iprefix' 選項(xiàng)指定 .

    ?

    -nostdinc
    不要在標(biāo)準(zhǔn)系統(tǒng)目錄中尋找頭文件 . 只搜索 `-I' 選項(xiàng)指定的目錄 ( 以及當(dāng)前目錄 , 如果合適 ).

    結(jié)合使用 `-nostdinc' `-I-' 選項(xiàng).\\





    內(nèi)嵌匯編語(yǔ)法如下:
    ?????? __asm__(匯編語(yǔ)句模板: 輸出部分: 輸入部分: 破壞描述部分)
    共四個(gè)部分:匯編語(yǔ)句模板,輸出部分,輸入部分,破壞描述部分,各部分使用“:”格開(kāi),匯編語(yǔ)句模板必不可少,其他三部分可選,如果使用了后面的部分,而前面部分為空,也需要用“:”格開(kāi),相應(yīng)部分內(nèi)容為空。例如:
    ???????????? __asm__ __volatile__("cli": : :"memory")

    1、匯編語(yǔ)句模板
    ????匯編語(yǔ)句模板由匯編語(yǔ)句序列組成,語(yǔ)句之間使用“;”、“\n”或“\n\t”分開(kāi)。指令中的操作數(shù)可以使用占位符引用C語(yǔ)言變量,操作數(shù)占位符最多10個(gè),名稱如下:%0,%1,…,%9。指令中使用占位符表示的操作數(shù),總被視為long型(4個(gè)字節(jié)),但對(duì)其施加的操作根據(jù)指令可以是字或者字節(jié),當(dāng)把操作數(shù)當(dāng)作字或者字節(jié)使用時(shí),默認(rèn)為低字或者低字節(jié)。對(duì)字節(jié)操作可以顯式的指明是低字節(jié)還是次字節(jié)。方法是在%和序號(hào)之間插入一個(gè)字母,“b”代表低字節(jié),“h”代表高字節(jié),例如:%h1

    2、輸出部分
    ????輸出部分描述輸出操作數(shù),不同的操作數(shù)描述符之間用逗號(hào)格開(kāi),每個(gè)操作數(shù)描述符由限定字符串和C 語(yǔ)言變量組成。每個(gè)輸出操作數(shù)的限定字符串必須包含“=”表示他是一個(gè)輸出操作數(shù)。
    例:
    ??????????__asm__ __volatile__("pushfl ; popl %0 ; cli":"=g" (x) )
    描述符字符串表示對(duì)該變量的限制條件,這樣GCC 就可以根據(jù)這些條件決定如何分配寄存器,如何產(chǎn)生必要的代碼處理指令操作數(shù)與C表達(dá)式或C變量之間的聯(lián)系。

    3、輸入部分
    輸入部分描述輸入操作數(shù),不同的操作數(shù)描述符之間使用逗號(hào)格開(kāi),每個(gè)操作數(shù)描述符由限定字符串和C語(yǔ)言表達(dá)式或者C語(yǔ)言變量組成。
    例1 :
    ????????????__asm__ __volatile__ ("lidt %0" : : "m" (real_mode_idt));
    例二(bitops.h):

    Static __inline__ void __set_bit(int nr, volatile void * addr)
    {
    ????????__asm__(
    ???????????????????????? "btsl %1,%0"
    ????????????????????????:"=m" (ADDR)
    ????????????????????????:"Ir" (nr));
    }

    后例功能是將(*addr)的第nr位設(shè)為1。第一個(gè)占位符%0與C 語(yǔ)言變量ADDR對(duì)應(yīng),第二個(gè)占位符%1與C語(yǔ)言變量nr對(duì)應(yīng)。因此上面的匯編語(yǔ)句代碼與下面的偽代碼等價(jià):btsl nr, ADDR,該指令的兩個(gè)操作數(shù)不能全是內(nèi)存變量,因此將nr的限定字符串指定為“Ir”,將nr 與立即數(shù)或者寄存器相關(guān)聯(lián),這樣兩個(gè)操作數(shù)中只有ADDR為內(nèi)存變量。

    4、限制字符
    ?? 4.1、限制字符列表
    ?? 限制字符有很多種,有些是與特定體系結(jié)構(gòu)相關(guān),此處僅列出常用的限定字符和i386中可能用到的一些常用的限定符。它們的作用是指示編譯器如何處理其后的C語(yǔ)言變量與指令操作數(shù)之間的關(guān)系。

    ?? 分類????????????限定符????????????????????描述
    ??通用寄存器?????? “a”?????????????? 將輸入變量放入eax
    ??????????????????????????????????????????????這里有一個(gè)問(wèn)題:假設(shè)eax已經(jīng)被使用,那怎么辦?
    ???????????????????????????????? 其實(shí)很簡(jiǎn)單:因?yàn)镚CC 知道eax 已經(jīng)被使用,它在這段匯編代碼
    ???????????????????????????????? 的起始處插入一條語(yǔ)句pushl %eax,將eax 內(nèi)容保存到堆棧,然
    ???????????????????????????????? 后在這段代碼結(jié)束處再增加一條語(yǔ)句popl %eax,恢復(fù)eax的內(nèi)容
    ?????????????????? “b”?????????????? 將輸入變量放入ebx
    ???????????????????????????? “c”?????????????? 將輸入變量放入ecx
    ????????????????????????????“d”????????????????將輸入變量放入edx
    ???????????????????????????? “s”?????????????? 將輸入變量放入esi
    ????????????????????????????“d”?????????????? 將輸入變量放入edi
    ???????????????????????????? “q”??????????????將輸入變量放入eax,ebx,ecx,edx中的一個(gè)
    ?????????????????? “r”?????????????? 將輸入變量放入通用寄存器,也就是eax,ebx,ecx,
    ????????????????????????????????????????edx,esi,edi中的一個(gè)
    ????????????????????“A”??????????????把eax和edx合成一個(gè)64 位的寄存器(use long longs)

    ?????? 內(nèi)存????????????“m”???????????? 內(nèi)存變量
    ???????????????????? “o”???????????? 操作數(shù)為內(nèi)存變量,但是其尋址方式是偏移量類型,
    ?????????????????????????????????????? 也即是基址尋址,或者是基址加變址尋址
    ???????????????????? “V”???????????? 操作數(shù)為內(nèi)存變量,但尋址方式不是偏移量類型
    ???????????????????? “ ”???????????? 操作數(shù)為內(nèi)存變量,但尋址方式為自動(dòng)增量
    ???????????????????? “p”???????????? 操作數(shù)是一個(gè)合法的內(nèi)存地址(指針)

    ???? 寄存器或內(nèi)存????“g”???????????? 將輸入變量放入eax,ebx,ecx,edx中的一個(gè)
    ?????????????????????????????????????? 或者作為內(nèi)存變量
    ??????????????????????“X”????????????操作數(shù)可以是任何類型

    ???? 立即數(shù)
    ???????????????????? “I”???????????? 0-31之間的立即數(shù)(用于32位移位指令)
    ??????????????????????“J”????????????0-63之間的立即數(shù)(用于64位移位指令)
    ???????????????????? “N”???????????? 0-255之間的立即數(shù)(用于out指令)
    ???????????????????? “i”???????????? 立即數(shù)??
    ???????????????????? “n”????????????立即數(shù),有些系統(tǒng)不支持除字以外的立即數(shù),
    ?????????????????????????????????????? 這些系統(tǒng)應(yīng)該使用“n”而不是“i”

    ???? 匹配????????????“ 0 ”,???????? 表示用它限制的操作數(shù)與某個(gè)指定的操作數(shù)匹配,
    ???????????????????? “1” ...?????????????? 也即該操作數(shù)就是指定的那個(gè)操作數(shù),例如“0”
    ??????????????????????“9”????????????去描述“%1”操作數(shù),那么“%1”引用的其實(shí)就
    ?????????????????????????????????????? 是“%0”操作數(shù),注意作為限定符字母的0-9 與
    ?????????????????????????????????????? 指令中的“%0”-“%9”的區(qū)別,前者描述操作數(shù),
    ?????????????????????????????????????? 后者代表操作數(shù)。
    ?????????????????????? &???????????????????? 該輸出操作數(shù)不能使用過(guò)和輸入操作數(shù)相同的寄存器

    ????操作數(shù)類型????????“=”??????????操作數(shù)在指令中是只寫的(輸出操作數(shù))??
    ?????????????????????? “+”??????????操作數(shù)在指令中是讀寫類型的(輸入輸出操作數(shù))

    ???? 浮點(diǎn)數(shù)????????????“f”??????????浮點(diǎn)寄存器
    ??????????????????????“t”?????????? 第一個(gè)浮點(diǎn)寄存器
    ??????????????????????“u”??????????第二個(gè)浮點(diǎn)寄存器
    ??????????????????????“G”??????????標(biāo)準(zhǔn)的80387浮點(diǎn)常數(shù)
    ?????????????????????? %?????????????????? 該操作數(shù)可以和下一個(gè)操作數(shù)交換位置
    ?????????????????????????????????????? 例如addl的兩個(gè)操作數(shù)可以交換順序
    ??????????????????????????????????????(當(dāng)然兩個(gè)操作數(shù)都不能是立即數(shù))
    ?????????????????????? #?????????????????? 部分注釋,從該字符到其后的逗號(hào)之間所有字母被忽略
    ?????????????????????? *???????????????????? 表示如果選用寄存器,則其后的字母被忽略

    5、破壞描述部分
    ?? 破壞描述符用于通知編譯器我們使用了哪些寄存器或內(nèi)存,由逗號(hào)格開(kāi)的字符串組成,每個(gè)字符串描述一種情況,一般是寄存器名;除寄存器外還有“memory”。例如:“%eax”,“%ebx”,“memory”等。



    凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
    、轉(zhuǎn)載請(qǐng)注明來(lái)處和原文作者。非常感謝。

    posted on 2006-11-20 14:00 草兒 閱讀(1463) 評(píng)論(0)  編輯  收藏 所屬分類: 軟件構(gòu)架
    主站蜘蛛池模板: 亚洲精品无码久久久久久| 瑟瑟网站免费网站入口| 日韩一级视频免费观看| 亚洲人成无码网WWW| 67pao强力打造67194在线午夜亚洲| 亚洲精品理论电影在线观看| 在线观看亚洲AV日韩AV| 久久国产一片免费观看| 国产h视频在线观看免费| 国产在线a免费观看| 亚洲中久无码不卡永久在线观看| 亚洲沟沟美女亚洲沟沟| 一级免费黄色毛片| 成人免费在线看片| 日韩黄色免费观看| 久久久亚洲精品无码| 337p日本欧洲亚洲大胆人人| 一级做受视频免费是看美女| 在线视频免费观看爽爽爽| 亚洲中文久久精品无码ww16| 一本天堂ⅴ无码亚洲道久久| 在线涩涩免费观看国产精品| 国产成人精品免费视频软件| 日木av无码专区亚洲av毛片| www免费插插视频| 性xxxx视频播放免费| 国产高清在线精品免费软件| 亚洲三级电影网站| 一级做a毛片免费视频| 好吊妞998视频免费观看在线| 亚洲男人天堂av| 中文毛片无遮挡高清免费| 免费观看一级毛片| a级亚洲片精品久久久久久久| 亚洲精品无码永久在线观看男男 | 亚洲AV一区二区三区四区| 日韩毛片免费一二三| 成人免费一区二区无码视频| 亚洲精品国产福利一二区| 亚洲小视频在线观看| 亚洲精品视频免费观看|