msvr3
打開(`-msvr4')或關(guān)閉(`-msvr3')和SystemV第四版(SVr4)相關(guān)的編譯器擴(kuò)展.效果如下:
*
輸出哪種匯編語法(你可以使用`-mversion-03.00'選項(xiàng)單獨(dú)選擇).
*
`-msvr4'使C預(yù)處理器識(shí)別`#pragmaweak'指令
*
`-msvr4'使GCC輸出額外的聲明指令(declarationdirective),用于SVr4.
除了SVr4配置,`-msvr3'是所有m88K配置的默認(rèn)選項(xiàng).
-mtrap-large-shift
-mhandle-large-shift
包含一些指令,用于檢測(cè)大于31位的位移(bit-shift);根據(jù)相應(yīng)的選項(xiàng),對(duì)這樣的位移發(fā)出自陷(trap)或執(zhí)行適當(dāng)?shù)奶幚泶a.默認(rèn)情況下,GCC對(duì)大位移不做特別處理.
-muse-div-instruction
很早以前的88K型號(hào)沒有(div)除法指令,因此默認(rèn)情況下GCC避免產(chǎn)生這條指令.而這個(gè)選項(xiàng)告訴GCC該指令是安全的.
-mversion-03.00
在DG/UX配置中存在兩種風(fēng)格的SVr4.這個(gè)選項(xiàng)修改-msvr4,選擇hybrid-COFF或real-ELF風(fēng)格.其他配置均忽略該選項(xiàng).
-mwarn-passed-structs
如果某個(gè)函數(shù)把結(jié)構(gòu)當(dāng)做參數(shù)或結(jié)果傳遞,GCC發(fā)出警告.隨著C語言的發(fā)展,人們已經(jīng)改變了傳遞結(jié)構(gòu)的約定,它往往導(dǎo)致移植問題.默認(rèn)情況下,GCC不會(huì)發(fā)出警告.
下面的選項(xiàng)用于IBMRS6000:
-MFP-in-toc
-mno-FP-in-toc
控制是否把浮點(diǎn)常量放到內(nèi)容表(TOC)中,內(nèi)容表存放所有的全局變量和函數(shù)地址.默認(rèn)情況下,GCC把浮點(diǎn)常量放到這里;如果TOC溢出,`-mno-fp-in-toc'選項(xiàng)能夠減少TOC的大小,這樣就可以避免溢出.
下面的`-m'選項(xiàng)用于IBMRTPC:
-min-line-mul
對(duì)于整數(shù)乘法使用嵌入代碼.這是默認(rèn)選項(xiàng).
-mcall-lib-mul
對(duì)于整數(shù)乘法使用lmul$$.
-mfull-fp-bLOCks
生成全尺寸浮點(diǎn)數(shù)據(jù)塊,包括IBM建議的最少數(shù)量的活動(dòng)空間(scratchsPACe).這是默認(rèn)選項(xiàng).
-mminimum-fp-blocks
不要在浮點(diǎn)數(shù)據(jù)塊中包括額外的活動(dòng)空間.這樣就產(chǎn)生較小但是略慢的可執(zhí)行程序,因?yàn)榛顒?dòng)空間必須動(dòng)態(tài)分配.
-mfp-arg-in-fpregs
采用不兼容IBM調(diào)用約定的調(diào)用序列,通過浮點(diǎn)寄存器傳送浮點(diǎn)參數(shù).注意,如果指定了這個(gè)選項(xiàng),varargs.h和stdargs.h將無法支持浮點(diǎn)單元.
-mfp-arg-in-gregs
使用正常的調(diào)用約定處理浮點(diǎn)參數(shù).這是默認(rèn)選項(xiàng).
-mhc-struct-return
通過內(nèi)存返回大于一個(gè)字的結(jié)構(gòu),而不是通過寄存器.用于兼容MetaWareHighC(hc)編譯器.使用`-fpcc-struct-return'選項(xiàng)可以兼容PortableC編譯器(pcc).
-mnohc-struct-return
如果可以,通過寄存器返回某些大于一個(gè)字的結(jié)構(gòu).這是默認(rèn)選項(xiàng).如果打算兼容IBM提供的編譯器,請(qǐng)使用`-fpcc-struct-return'或`-mhc-struct-return'選項(xiàng).
下面的`-m'選項(xiàng)用于MIPS家族的計(jì)算機(jī):
-mcpu=cpu-type
生成指令的時(shí)候,假設(shè)默認(rèn)的機(jī)器類型是cpu-type.默認(rèn)情況下的cpu-type是default,GCC將選取任何機(jī)型上都是最長周期時(shí)間的指令,這樣才能使代碼在所有的MIPS處理器上以合理的速度運(yùn)行.cpu-type的其他選擇是r2000,r3000,r4000,和 r6000.雖然選定某個(gè)cpu-type后,GCC將針對(duì)選定的芯片安排對(duì)應(yīng)的工作,但是如果不指定??-mips2或-mips3選項(xiàng),編譯器不會(huì)輸出任何不符合MIPSISA(instructionsetarchitecture)一級(jí)的代碼.
-mips2
輸出MIPSISA二級(jí)指令(可能的擴(kuò)展,如平方根指令).-mcpu=r4000或-mcpu=r6000選項(xiàng)必須和-mips2聯(lián)用.
-mips3
輸出MIPSISA三級(jí)指令(64位指令).-mcpu=r4000選項(xiàng)必須和-mips2聯(lián)用.(譯注:疑為-mips3)
-mint64
-mlong64
-mlonglong128
這些選項(xiàng)目前不起作用.
-mmips-as
產(chǎn)生用于MIPS匯編器的代碼,同時(shí)使用mips-tfile添加普通的調(diào)試信息.對(duì)于大多數(shù)平臺(tái)這是默認(rèn)選項(xiàng),除了OSF/1參考平臺(tái),它使用 OSF/rose目標(biāo)格式.如果打開了任一個(gè)-ggdb,-gstabs,或-gstabs+選項(xiàng)開關(guān),mips-tfile程序就把stab封裝在 MIPSECOFF里面.
-mgas
產(chǎn)生用于GNU匯編器的代碼.在OSF/1參考平臺(tái)上這是默認(rèn)選項(xiàng),它使用OSF/rose目標(biāo)格式.
-mrnames
-mno-rnames
-mrnames開關(guān)選項(xiàng)告訴輸出代碼使用MIPS軟件名稱說明寄存器,而不是硬件名稱(就是說,用a0代替$4).GNU匯編器不支持-mrnames選項(xiàng),而MIPS匯編器則運(yùn)行MIPSC預(yù)處理器處理源文件.-mno-rnames是默認(rèn)選項(xiàng).
-mgpopt
-mno-gpopt
-mgpopt開關(guān)選項(xiàng)要求在正文段中把所有的數(shù)據(jù)聲明寫到指令前面,使各種MIPS匯編器對(duì)短類型全局或靜態(tài)數(shù)據(jù)項(xiàng)(shortglobalorstatICdataitEMS)輸出單字內(nèi)存訪問而不是雙字內(nèi)存訪問.當(dāng)打開編譯優(yōu)化時(shí),這是默認(rèn)功能.
-mstats
-mno-stats
每次處理完非嵌入函數(shù)(non-inlinefunction)后,-mstats開關(guān)選項(xiàng)使編譯器向標(biāo)準(zhǔn)錯(cuò)誤文件輸出一行關(guān)于程序的統(tǒng)計(jì)資料(保存的寄存器數(shù)目,堆棧大小,等等).
-mmEMCpy
-mno-mEMCpy
-mmemcpy開關(guān)選項(xiàng)使所有的塊移動(dòng)操作調(diào)用適當(dāng)?shù)膕tring函數(shù)(memcpy或bcopy),而不是生成嵌入代碼.
-mmips-tfile
-mno-mips-tfile
當(dāng)MIPS 匯編器生成mips-tfile文件(用于幫助調(diào)試)后,-mno-mips-tfile開關(guān)選項(xiàng)阻止編譯器使用mips-tfile后期處理 (postprocess)目標(biāo)文件.不運(yùn)行mips-tfile就沒有調(diào)試器關(guān)注的局部變量.另外,stage2和stage3目標(biāo)文件將把臨時(shí)文件名傳遞給匯編器,嵌在目標(biāo)文件中,這意味著不比較目標(biāo)文件是否相同.
-mSOFt-float
輸出包含浮點(diǎn)庫調(diào)用.警告:所需庫不是GNUCC的一部分.一般說來使用該機(jī)型本地C編譯器的相應(yīng)部件,但是不能直接用于交叉編譯,你必須自己安排,提供交叉編譯適用的庫函數(shù).
-mhard-float
輸出包含浮點(diǎn)指令.如果編譯器沒有被改動(dòng),這就是默認(rèn)選項(xiàng).
-mfp64
編譯器認(rèn)為狀態(tài)字的FR置位(on),也就是說存在3264-bit浮點(diǎn)寄存器,而不是3232-bit浮點(diǎn)寄存器.同時(shí)必須打開-mcpu=r4000和-mips3開關(guān).
-mfp32
認(rèn)為存在3232-bit浮點(diǎn)寄存器.這是默認(rèn)選項(xiàng).
-mabicalls
-mno-abicalls
輸出(或不輸出).abicalls,.cpload,和.cprestore偽指令,某些SystemV.4版本用于位置無關(guān)代碼.
-mhalf-pic
-mno-half-pic
-mhalf-pic開關(guān)選項(xiàng)要求把外部引用的指針放到數(shù)據(jù)段,并且載入內(nèi)存,而不放到正文段.該選項(xiàng)目前不起作用.
-Gnum
把小于等于num字節(jié)的全局或靜態(tài)數(shù)據(jù)放到小的數(shù)據(jù)段或bss段,而不是普通的數(shù)據(jù)段或bss段.這樣匯編器可以輸出基于全局指針(gp或$28),的單字內(nèi)存訪問指令而非普通的雙字指令.默認(rèn)情況下,用MIPS匯編器時(shí)num是8,而GNU匯編器則為0.另外,-Gnum選項(xiàng)也被傳遞給匯編器和連接器.所有的模塊必須在相同的-Gnum值下編譯.
-nocpp
匯編用戶匯編文件(帶有`.s'后綴)時(shí),告訴MIPS匯編器不要運(yùn)行預(yù)處理器.
下面的`-m'選項(xiàng)用于Intel80386族計(jì)算機(jī):-m486
-mno-486
控制是否生成對(duì)486優(yōu)化的代碼.
-msoft-float
輸出包含浮點(diǎn)庫調(diào)用.警告:所需庫不是GNUCC的一部分.一般說來使用該機(jī)型本地C編譯器的相應(yīng)部件,但是不能直接用于交叉編譯,你必須自己安排,提供交叉編譯適用的庫函數(shù).
在函數(shù)把浮點(diǎn)返回值放在80387寄存器棧的機(jī)器上,即使設(shè)置了`-msoft-float'選項(xiàng),也可能會(huì)發(fā)出一些浮點(diǎn)操作碼.
-mno-fp-ret-in-387
不用FPU寄存器返回函數(shù)值.
通常函數(shù)調(diào)用約定把float和double的返回值放在FPU寄存器中,即使不存在FPU.這種作法的理念是操作系統(tǒng)應(yīng)該仿真出FPU.
而`-mno-fp-ret-in-387'選項(xiàng)使浮點(diǎn)值通過普通的CPU寄存器返回.
下面的`-m'選項(xiàng)用于HPPA族計(jì)算機(jī):
-mpa-risc-1-0
生成PA1.0處理器的目標(biāo)碼.
-mpa-risc-1-1
生成PA1.1處理器的目標(biāo)碼.
-mkernel
生成適用于內(nèi)核的目標(biāo)碼.特別要避免add指令,它有一個(gè)參數(shù)是DP寄存器;用adDIL代替add指令.這樣可以避免HP-UX連接器的某個(gè)嚴(yán)重bug.
-mshared-libs
生成能夠連接HP-UX共享庫的目標(biāo)碼.該選項(xiàng)還沒有實(shí)現(xiàn)全部功能,對(duì)PA目標(biāo)默認(rèn)為關(guān)閉.使用這個(gè)選項(xiàng)會(huì)導(dǎo)致編譯器生成錯(cuò)誤的目標(biāo)碼.
-mno-shared-libs
不生成連接HP-UX共享庫的目標(biāo)碼.這是PA目標(biāo)的默認(rèn)選項(xiàng).
-mlong-calls
生成的目標(biāo)碼允許同一個(gè)源文件中的函數(shù)調(diào)用,調(diào)用點(diǎn)和被調(diào)函數(shù)的距離可以超過256K之遠(yuǎn).不需要打開這個(gè)開關(guān)選項(xiàng),除非連接器給出``branchoutofrangeerrors``這樣的錯(cuò)誤.
-mdisable-fpregs
防止任何情況下使用浮點(diǎn)寄存器.編譯內(nèi)核需要這個(gè)選項(xiàng),內(nèi)核切換浮點(diǎn)寄存器的執(zhí)行環(huán)境速度非常緩慢.如果打開了這個(gè)開關(guān)選項(xiàng)同時(shí)試圖浮點(diǎn)操作,編譯將失敗.
-mdisable-indexing
防止編譯器使用索引地址模式(indexingaddressmode).這樣在MACH上編譯MIG生成的代碼時(shí),可以避免一些非?;逎膯栴}.
-mtrailing-colon
在標(biāo)記定義(labeldefinition)的末尾添加一個(gè)冒號(hào)(用于ELF匯編器).
下面的`-m'選項(xiàng)用于Intel80960族計(jì)算機(jī):
-mcpu-type
默認(rèn)機(jī)器類型為cpu-type,使編譯器產(chǎn)生對(duì)應(yīng)的指令,地址模式和內(nèi)存對(duì)齊.默認(rèn)的cpu-type是kb;其他選擇有ka,mc,ca,cf,sa,和sb.
-mnumerics
-msoft-float
-mnumerics開關(guān)選項(xiàng)指出處理器不支持浮點(diǎn)指令.-msoft-float開關(guān)選項(xiàng)指出不應(yīng)該認(rèn)為機(jī)器支持浮點(diǎn)操作.
-mleaf-procedures
-mno-leaf-procedures
企圖(或防止)改變?nèi)~過程(leafprocedure),使其可被bal指令以及call指令調(diào)用.對(duì)于直接函數(shù)調(diào)用,如果bal指令能夠被匯編器或連接器替換,這可以產(chǎn)生更有效的代碼,但是其他情況下產(chǎn)生較低效的代碼,例如通過函數(shù)指針調(diào)用函數(shù),或使用了不支持這種優(yōu)化的連接器.
-mtail-call
-mno-tail-call
執(zhí)行(或不執(zhí)行)更多的嘗試(除過編譯器那些機(jī)器無關(guān)部分),優(yōu)化進(jìn)入分支的尾遞歸(tail-recursive)調(diào)用.你可能不需要這個(gè),因?yàn)闄z測(cè)什么地方無效沒有全部完成.默認(rèn)開關(guān)是-mno-tail-call.
-mcomplex-addr
-mno-complex-addr
認(rèn)為(或不認(rèn)為)在當(dāng)前的i960設(shè)備上,值得使用復(fù)合地址模式(complexaddressingmode).復(fù)合地址模式可能不值得用到K系列,但是一定值得用在C系列.目前除了CB和CC處理器,其他處理器上-mcomplex-addr是默認(rèn)選項(xiàng).
-mcode-align
-mno-code-align
把目標(biāo)碼對(duì)齊到8字節(jié)邊界上(或者不必),這樣讀取會(huì)快一些.目前只對(duì)C系列默認(rèn)打開.
-mic-compat
-mic2.0-compat
-mic3.0-compat
兼容iC960v2.0或v3.0.
-masm-compat
-mintel-asm
兼容iC960匯編器.
-mstrict-align
-mno-strict-align
不允許(或允許)邊界不對(duì)齊的訪問.
-mold-align
使結(jié)構(gòu)對(duì)齊(structure-alignment)兼容Intel的gcc發(fā)行版本1.3(基于gcc1.37).目前這個(gè)選項(xiàng)有點(diǎn)問題,因?yàn)?pragmaalign1總是作同樣的設(shè)定,而且無法關(guān)掉.
下面的`-m'選項(xiàng)用于DECAlpha設(shè)備:
-mno-soft-float
-msoft-float
使用(或不使用)硬件浮點(diǎn)指令進(jìn)行浮點(diǎn)運(yùn)算.打開-msoft-float時(shí),將使用`libgcc1.c'中的函數(shù)執(zhí)行浮點(diǎn)運(yùn)算.除非它們被仿真浮點(diǎn)操作的例程替換,或者類似,它們被編譯為調(diào)用仿真例程,這些例程將發(fā)出浮點(diǎn)操作.如果你為不帶浮點(diǎn)操作的Alpha編譯程序,你必須確保建立了這個(gè)庫,以便不調(diào)用仿真例程.
注意,不帶浮點(diǎn)操作的Alpha也要求擁有浮點(diǎn)寄存器.
-mfp-reg
-mno-fp-regs
生成使用(或不使用)浮點(diǎn)寄存器群的目標(biāo)代碼.-mno-fp-regs包含有-msoft-float開關(guān)選項(xiàng).如果不使用浮點(diǎn)寄存器,浮點(diǎn)操作數(shù)就象整數(shù)一樣通過整數(shù)寄存器傳送,浮點(diǎn)運(yùn)算結(jié)果放到$0而不是$f0.這是非標(biāo)準(zhǔn)調(diào)用,因此任何帶有浮點(diǎn)參數(shù)或返回值的函數(shù),如果被-mno-fp- regs開關(guān)編譯過的目標(biāo)碼調(diào)用,它也必須用這個(gè)選項(xiàng)編譯.
這個(gè)選項(xiàng)的典型用法是建立內(nèi)核,內(nèi)核不使用任何浮點(diǎn)寄存器,因此沒必要保存和恢復(fù)這些寄存器.
下面附加的選項(xiàng)出現(xiàn)在SystemV第四版中,用于兼容這些系統(tǒng)中的其他編譯器:
-G
在SVr4系統(tǒng)中,gcc出于兼容接受了`-G'選項(xiàng)(然后傳遞給連接器).可是我們建議使用`-symbolic'或`-shared'選項(xiàng),而不在gcc命令行上出現(xiàn)連接選項(xiàng).
-Qy
驗(yàn)證編譯器用的工具的版本,輸出到.ident匯編指令.
-Qn
制止輸出端的.ident指令(默認(rèn)選項(xiàng)).
-YP,dirs
對(duì)于`-l'指定的庫文件,只搜索dirs.你可以在dirs中用冒號(hào)隔開各個(gè)目錄項(xiàng).
-Ym,dir
在dir目錄中尋找M4預(yù)處理器.匯編器使用這個(gè)選項(xiàng).
代碼生成選項(xiàng)(CODEGENERATIONOPTION)
下面的選項(xiàng)和平臺(tái)無關(guān),用于控制目標(biāo)碼生成的接口約定.
大部分選項(xiàng)以`-f'開始.這些選項(xiàng)擁有確定和否定兩種格式;`-ffoo'的否定格式是`-fno-foo'.后面的描述將只列舉其中的一個(gè)格式---非默認(rèn)的格式.你可以通過添加或去掉`no-'推測(cè)出另一個(gè)格式.
-fnonnull-objects
假設(shè)通過引用(reference)取得的對(duì)象不為null(僅C++).
一般說來,GNUC++對(duì)通過引用取得的對(duì)象作保守假設(shè).例如,編譯器一定會(huì)檢查下似代碼中的a不為null:
obj&a=g();a.f(2);
檢查類似的引用需要額外的代碼,然而對(duì)于很多程序是不必要的.如果你的程序不要求這種檢查,你可以用`-fnonnull-objects'選項(xiàng)忽略它.
-fpcc-struct-return
函數(shù)返回struct和union值時(shí),采用和本地編譯器相同的參數(shù)約定.對(duì)于較小的結(jié)構(gòu),這種約定的效率偏低,而且很多機(jī)器上不能重入;它的優(yōu)點(diǎn)是允許GCC編譯的目標(biāo)碼和PCC編譯的目標(biāo)碼互相調(diào)用.
-freg-struct-return
一有可能就通過寄存器返回struct和union函數(shù)值.對(duì)于較小的結(jié)構(gòu),它比-fpcc-struct-return更有效率.
如果既沒有指定-fpcc-struct-return,也沒有指定-freg-struct-return,GNUCC默認(rèn)使用目標(biāo)機(jī)的標(biāo)準(zhǔn)約定.如果沒有標(biāo)準(zhǔn)約定,GNUCC默認(rèn)采用-fpcc-struct-return.
-fshort-enums
給enum類型只分配它聲明的值域范圍的字節(jié)數(shù).就是說,enum類型等于大小足夠的最小整數(shù)類型.
-fshort-double
使double類型的大小和float一樣.
-fshared-data
要求編譯結(jié)果的數(shù)據(jù)和非const變量是共享數(shù)據(jù),而不是私有數(shù)據(jù).這種差別僅在某些操作系統(tǒng)上面有意義,那里的共享數(shù)據(jù)在同一個(gè)程序的若干進(jìn)程間共享,而私有數(shù)據(jù)在每個(gè)進(jìn)程內(nèi)都有副件.
-fno-common
即使未初始化的全局變量也分配在目標(biāo)文件的bss段,而不是把它們當(dāng)做普通塊(commonblock)建立.這樣的結(jié)果是,如果在兩個(gè)不同的編譯結(jié)果中聲明了同一個(gè)變量(沒使用extern),連接它們時(shí)會(huì)產(chǎn)生錯(cuò)誤.這個(gè)選項(xiàng)可能有用的唯一情況是,你希望確認(rèn)程序能在其他系統(tǒng)上運(yùn)行,而其他系統(tǒng)總是這么做.
-fno-ident
忽略`#ident'指令.
-fno-gnu-linker
不要把全局初始化部件(如C++的構(gòu)造子和解構(gòu)子)輸出為GNU連接器使用的格式(在GNU連接器是標(biāo)準(zhǔn)方法的系統(tǒng)上).當(dāng)你打算使用非GNU連接器的時(shí)候可以用這個(gè)選項(xiàng),非GNU連接器也需要collect2程序確保系統(tǒng)連接器放入構(gòu)造子(constructor)和解構(gòu)子(destructor). (GNUCC的發(fā)布包中包含有collect2程序.)對(duì)于必須使用collect2的系統(tǒng),編譯器驅(qū)動(dòng)程序gcc自動(dòng)配置為這么做.
-finhibit-size-directive
不要輸出.size匯編指令,或其他類似指令,當(dāng)某個(gè)函數(shù)一分為二,兩部分在內(nèi)存中距離很遠(yuǎn)時(shí)會(huì)引起問題.當(dāng)編譯`crtstuff.c'時(shí)需要這個(gè)選項(xiàng);其他情況下都不應(yīng)該使用.
-fverbose-asm
輸出匯編代碼時(shí)放些額外的注釋信息.這個(gè)選項(xiàng)僅用于確實(shí)需要閱讀匯編輸出的時(shí)候(可能調(diào)試編譯器自己的時(shí)候).
-fvolatile
使編譯器認(rèn)為所有通過指針訪問的內(nèi)存是易變內(nèi)存(volatile).
-fvolatile-global
使編譯器認(rèn)為所有的外部和全局變量是易變內(nèi)存.
-fpic
如果支持這種目標(biāo)機(jī),編譯器就生成位置無關(guān)目標(biāo)碼.適用于共享庫(sharedlibrary).
-fPIC
如果支持這種目標(biāo)機(jī),編譯器就輸出位置無關(guān)目標(biāo)碼.適用于動(dòng)態(tài)連接(dynamiclinking),即使分支需要大范圍轉(zhuǎn)移.
-ffixed-reg
把名為reg的寄存器按固定寄存器看待(fixedregister);生成的目標(biāo)碼不應(yīng)該引用它(除了或許用作棧指針,幀指針,或其他固定的角色).
reg必須是寄存器的名字.寄存器名字取決于機(jī)器,用機(jī)器描述宏文件的REGISTER_NAMES宏定義.
這個(gè)選項(xiàng)沒有否定格式,因?yàn)樗谐鋈愤x擇.
-fcall-used-reg
把名為reg的寄存器按可分配寄存器看待,不能在函數(shù)調(diào)用間使用.可以臨時(shí)使用或當(dāng)做變量使用,生存期不超過一個(gè)函數(shù).這樣編譯的函數(shù)無需保存和恢復(fù)reg寄存器.
如果在可執(zhí)行模塊中,把這個(gè)選項(xiàng)說明的寄存器用作固定角色將會(huì)產(chǎn)生災(zāi)難性結(jié)果,如棧指針或幀指針.
這個(gè)選項(xiàng)沒有否定格式,因?yàn)樗谐鋈愤x擇.
-fcall-saved-reg
把名為reg的寄存器按函數(shù)保護(hù)的可分配寄存器看待.可以臨時(shí)使用或當(dāng)做變量使用,它甚至能在函數(shù)間生存.這樣編譯的函數(shù)會(huì)保存和恢復(fù)使用中的reg寄存器.
如果在可執(zhí)行模塊中,把這個(gè)選項(xiàng)說明的寄存器用作固定角色將會(huì)產(chǎn)生災(zāi)難性結(jié)果,如棧指針或幀指針.
另一種災(zāi)難是用這個(gè)選項(xiàng)說明的寄存器返回函數(shù)值.
這個(gè)選項(xiàng)沒有否定格式,因?yàn)樗谐鋈愤x擇.
PRAGMAS
GNUC++支持兩條`#pragma'指令使同一個(gè)頭文件有兩個(gè)用途:對(duì)象類的接口定義,對(duì)象類完整的內(nèi)容定義.
#pragmainterface
(僅對(duì)C++)在定義對(duì)象類的頭文件中,使用這個(gè)指令可以節(jié)省大部分采用該類的目標(biāo)文件的大小.一般說來,某些信息(內(nèi)嵌成員函數(shù)的備份副件,調(diào)試信息,實(shí)現(xiàn)虛函數(shù)的內(nèi)部表格等)的本地副件必須保存在包含類定義的各個(gè)目標(biāo)文件中.使用這個(gè)pragma指令能夠避免這樣的復(fù)制.當(dāng)編譯中引用包含 `#pragmainterface'指令的頭文件時(shí),就不會(huì)產(chǎn)生這些輔助信息(除非輸入的主文件使用了 `#pragmaimplementation'指令).作為替代,目標(biāo)文件將包含可被連接時(shí)解析的引用(reference).
#pragmaimplementation
#pragmaimplementation"objects.h"
(僅對(duì)C++)如果要求從頭文件產(chǎn)生完整的輸出(并且全局可見),你應(yīng)該在主輸入文件中使用這條pragma.頭文件中應(yīng)該依次使用 `#pragmainterface'指令.在implementation文件中將產(chǎn)生全部內(nèi)嵌成員函數(shù)的備份,調(diào)試信息,實(shí)現(xiàn)虛函數(shù)的內(nèi)部表格等.
如果`#pragmaimplementation'不帶參數(shù),它指的是和源文件有相同基本名的包含文件;例如, `allclass.cc'中,`#pragmaimplementation'等于 `#pragmaimplementationallclass.h'.如果某個(gè)implementation文件需要從多個(gè)頭文件引入代碼,就應(yīng)該 使用這個(gè)字符串參數(shù).
不可能把一個(gè)頭文件里面的內(nèi)容分割到多個(gè)implementation文件中.
文件(FILE)
file.cC源文件
file.hC頭文件(預(yù)處理文件)
file.i預(yù)處理后的C源文件
file.CC++源文件
file.ccC++源文件
file.cxxC++源文件
file.mObjective-C源文件
file.s匯編語言文件
file.o目標(biāo)文件
a.out連接的輸出文件
TMPDIR/cc*臨時(shí)文件
LIBDIR/cpp預(yù)處理器
LIBDIR/cc1C編譯器
LIBDIR/cc1plusC++編譯器
LIBDIR/collect某些機(jī)器需要的連接器前端(frontend)程序
LIBDIR/libgcc.aGCC子例程(subroutine)庫
/lib/crt[01n].o啟動(dòng)例程(start-up)
LIBDIR/ccrt0C++的附加啟動(dòng)例程
/lib/libc.a標(biāo)準(zhǔn)C庫,另見intro(3)
/usr/include#include文件的標(biāo)準(zhǔn)目錄
LIBDIR/include#include文件的標(biāo)準(zhǔn)gcc目錄
LIBDIR/g++-include#include文件的附加g++目錄
LIBDIR通常為/usr/local/lib/machine/version.
TMPDIR來自環(huán)境變量TMPDIR(如果存在,缺省為/usr/tmp,否則為/tmp).
另見(SEEALSO)
cpp(1),as(1),ld(1),gdb(1),adb(1),dbx(1),sdb(1).
info中`gcc',`cpp',`as',`ld',和`gdb'的條目.
UsingandPortingGNUCC (forversion2.0),RichardM.Stallman;TheCPreprocessor,RichardM.Stallman; DebuggingwithGDB:theGNUSource-LevelDebugger,RichardM.Stallman和 RolandH.Pesch;Usingas:theGNUAssembler,DeanElsner,JayFenlason& friends;ld:theGNUlinker,SteveChamberlain和RolandPesch.
BUGS
關(guān)于報(bào)告差錯(cuò)的指導(dǎo)請(qǐng)查閱GCC手冊(cè).
版權(quán)(COPYING)
Copyright1991,1992,1993FreeSoftwareFoundation,Inc.
Permissionisgrantedtomakeanddistributeverbatimcopiesofthismanualprovidedthecopyrightnoticeandthispermissionnoticearepreservedonallcopies.
Permissionisgrantedtocopyanddistributemodifiedversionsofthismanualundertheconditionsforverbatimcopying,providedthattheentireresultingderivedworkisdistributedunderthetermsofapermissionnoticeidenticaltothisone.
Permissionisgrantedtocopyanddistributetranslationsofthismanualintoanotherlanguage,undertheaboveconditionsformodifiedversions,exceptthatthispermissionnoticemaybeincludedintranslationsapprovedbytheFreeSoftwareFoundationinsteadofintheoriginalEnglish.





