Unix操作系統(tǒng)知識講解
我們在Unix操作系統(tǒng)中,實現(xiàn)C源程序到可執(zhí)行文件的這一轉(zhuǎn)換過程的工具是cc。在大多數(shù)系統(tǒng)中cc實際上是一個shell命令文件。cc命令還提供了其他許多有用的命令行選項。
借助于這些選項我們可以對編譯過程進(jìn)行進(jìn)一步的控制,如使cc只完成某些階段的編譯工作,指定對頭文件的搜索目錄,指定對代碼進(jìn)行優(yōu)化,指定在代碼中加入一些供調(diào)試程序所用的信息,等等。下面我們分別討論這些問題。
1.Unix操作系統(tǒng)僅進(jìn)行編譯預(yù)處理
在命令行中加上-P選項可以使cc僅完成對.c文件的預(yù)處理工作,而后面的編譯,匯編,優(yōu)化,鏈接則都不作,例如:$ cc -P myprog.c
此時編譯Unix操作系統(tǒng)將在當(dāng)前目錄下生成一個名為myprog.i的文件。這個文件中包含有對myprog.c中的偽指令進(jìn)行處理后的代碼及myprog.c中原有的代碼。
在某些情況下,.i文件可能對于程序排錯有一定的用處。對于下面的代碼段,編譯程序可能會報告j無定義的錯誤:
- for (i=0;i<10;i++)
- { /*declare avariable j:
- int j;/*This is a temporary variable */
- j=i*i;
- .
- .
- .
- }
預(yù)編譯處理后,缺省情況下,預(yù)處理程序?qū)言闯绦蛑械淖⑨寗h除,這樣改段代碼將變成:
- for (i=0;i<10;i++)
- {
- j=i*i;
- .
- .
- .
- }
這樣一來我們將能夠比較快地發(fā)現(xiàn)程序中的錯誤。利用.i文件,我們還能夠?qū)l件編譯和宏擴展后的結(jié)果進(jìn)行檢查。
在cc命令行中加上-C選項可以在預(yù)編譯后的文件中保留源文件中的注釋。
2.Unix操作系統(tǒng)僅生成匯編語言代碼
在cc命令行中加上-S 選項,可以使cc只調(diào)用預(yù)處理程序和編譯程序以生成與源程序相應(yīng)的匯編代碼。與每一個C源文件相應(yīng)的匯編程序被放到相應(yīng)的.s文件中。例如:
- $ cc -S myprog.c myfunc.c
- $ ls *.s
- myfunc.s myprog.s
- $
這種匯編語言代碼是同機器具體相關(guān)的。有些情況下我們可能需要用匯編語言進(jìn)行編程,這時可以先用C語言編寫此程序,再編譯得到匯編程序,然后手工對此匯編程序修修改改,估計基本上就能滿足要求。由于用匯編語言進(jìn)行編程是一件效率比較低的工作,用此種方法可以預(yù)期將獲得比較高的效率。
我們關(guān)于Unix操作系統(tǒng)的知識就講到這里了。
【編輯推薦】