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