GNU 程式設計GNU 程式簡介GNU 與 C 語言gcc 編譯器glibc 函式庫make 建置ld 連結器as 組譯器ar 函式庫objdumpobjcopy訊息相關網站參考文獻最新修改簡體版English |
範例 1 具有巨集的C語言 - 展開前與展開後的狀況
條件式展開C語言當中的巨集處理器,支援條件式展開的功能,這種功能對 C 語言相當重要,由其在專案管理上更是不可或缺。以下,我們將說明C語言中條件式展開的巨集處理器之用途。首先,請讀者看範例 2 (a) 的程式,該程式用 #ifdef 條件式巨集指令,定義了 bugs 變數與 error(msg) 巨集函數。並且在程式的最後利用 error() 函數印出錯誤訊息,然後報告總共有幾個錯誤。 接著,請讀者利用 gcc 加上 -E 參數的方式,編譯該程式,指令如下所示。 gcc -E macroDebug.c -o MacroDebug_E.c 該指令會將程式的巨集展開,但因為編譯時沒有定義 _DEBUG_ 這個符號,因此,展開後的程式不會印出除錯訊息。其原始碼如範例 2 (b) 所示。 範例 2. 具有條件式巨集的C語言 - 展開前與展開後的狀況
接著,再請讀者利用下列指令編譯該程式,其中的 –D_DEBUG_ 參數會動態的定義一個 _DEBUG_ 巨集符號傳給 gcc 編譯器。
此時,由於 _DEBUG_ 符號已被定義,因此,展開後的程式會定義 bugs變數, error(msg) 函數,並印出除錯訊息。其原始碼如範例 2 (c) 所示。 這種條件式的巨集定義的方式,在 C 語言當中相當常見,利用這種方式,我們可以編譯出程式碼較大的除錯版本,以便於除錯時使用。然後,在程式要發行時,編譯一個沒有 _DEBUG_ 符號的版本,如此,發行的軟體程式會較為精簡,也不會動不動就跑出錯誤訊息來困擾使用者。這是使用 C 語言開發軟體時必須知道的基本知識。 |
GNU 的巨集展開功能 (C 語言)
page revision: 6, last edited: 11 Oct 2010 05:46






Post preview:
Close preview