在前面幾期中,,我們了解到DSP編程技巧之:編譯流程與處理器選項,、DSP編程技巧之:程序優(yōu)化,、DSP編程技巧之:調(diào)試與路徑選項,今天為大家講解控制與語言選項以及預(yù)處理與診斷,。
編譯器有一些控制選項,,這些選項是供我們來控制編譯器的,不像前幾篇文章提到的那些選項那樣,,是編譯器用來控制編譯結(jié)果的,。下面我們就來看看我們可以使用的控制編譯器的選項有哪些:
就編譯器本身來說,它只要讀取C,、C++,、匯編等文件進行處理就完成任務(wù)了,所以編譯器的控制選項并不多,,一般情況下一個-z選項就足夠我們完成從編譯程序到生成目標(biāo)的編譯器控制效果了,。相比較而言,C,、C++這些語言本身就復(fù)雜的多了,,并且因為有很多個版本的存在,難免有一些小混亂的存在,,所以編譯器里與編程語言本身相關(guān)的選項就顯得特別多,,以便我們來對語言的特性等進行正確使用,下面就看看編譯器里與編程語言有關(guān)的選項:
從表2里也可以看出,,大部分特性是與C++編程息息相關(guān)的,,如果僅僅使用C進行一些編程的話,對編譯器的編程語言選項的使用確實要簡單了不少,。
在編程軟件例如CCS中編程時,代碼分析工具可以方便我們對代碼進行分析,,例如我們把鼠標(biāo)指向一個函數(shù)名的時候,,所指的地方就能出來一個實時菜單,使得我們可以直接定位到函數(shù)的聲明,、被調(diào)用的位置或者某個宏定義等等,,非常方便。這種功能是如何實現(xiàn)的呢?在編譯器的前端是一個語義解析器,,它負責(zé)把源程序中的token找出來,,然后解析器parser(也有的地方叫分析器)就可以解析這些token,,并產(chǎn)生樹狀表,供編程環(huán)境使用;此外解析器還可以完成一部分的語法錯誤檢查功能,。如果希望了解關(guān)于解析器的更詳細的信息,,可以參考編譯原理方面最著名的“龍書”,即《Compliers: Principles, Techniques, &Tools》;在K&RC語言文檔的A12這一節(jié)中也對解析器的預(yù)處理功能進行了詳細的敘述,,它預(yù)處理的信息主要包括:
1. 宏定義和擴展,,例如_INLINE;
2. #include引用的文件,包括<>和“”兩種方法引用的頭文件;
3. 條件編譯指令,,例如#if,,#endif等等;
4. 其它的多種預(yù)處理指令,主要是#開頭的一些指令,,例如#error,。
我們可以控制編譯器的預(yù)處理選項,使得解析器根據(jù)我們的需求產(chǎn)生需要的預(yù)處理結(jié)果,,方便我們對程序的開發(fā)調(diào)試;這些選項如表1所示,。
因為預(yù)處理器要使用到文件中的符號信息,所以相關(guān)的預(yù)定義信息一定要提供給預(yù)處理器,,否則找不到符號信息就要報錯了,。符號選項比較簡單,就是預(yù)定義與解除定義,,如表2所示,。
在程序的處理過程中,我們可以控制編譯器輸出診斷信息選項,,使得它輸出我們期望的詳細信息,,更加容易定位和解決一些看起來難以捉摸的問題;這些選項如表3所示。需要注意的是,,診斷信息相關(guān)的選項必須放在鏈接器選項--run_linker之前,。