<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話(huà) > DSP編程技巧之6---揭開(kāi)編譯器神秘面紗之控制與語(yǔ)言選項(xiàng)

          DSP編程技巧之6---揭開(kāi)編譯器神秘面紗之控制與語(yǔ)言選項(xiàng)

          作者:paradoxfx 時(shí)間:2014-03-07 來(lái)源:電子產(chǎn)品世界 收藏

            有一些,這些選項(xiàng)是供我們來(lái)控制的,不像前幾篇文章提到的那些選項(xiàng)那樣,是用來(lái)控制編譯結(jié)果的。下面我們就來(lái)看看我們可以使用的控制編譯器的選項(xiàng)有哪些:

          本文引用地址:http://www.ex-cimer.com/article/234327.htm

            表1?編譯器的

          別名

          控制效果

          --compile_only

          -c

          控制編譯器使得它只編譯,不鏈接。

          --help

          -h

          輸出編譯器使用的優(yōu)化、控制等選項(xiàng)信息。它的后面可以加一些更明確的選項(xiàng)或者名詞,例如--help?debug就可以輸出關(guān)于debug的選項(xiàng)的信息。

          --run_linker

          -z

          使能編譯之后的鏈接功能,與第一行的-c相對(duì)。-c-z同時(shí)存在時(shí),-c起作用,-z不起作用。

          --skip_assembler

          -n

          只編譯,但是也不產(chǎn)生匯編文件。這樣做的目的主要是為了快速驗(yàn)證程序有沒(méi)有基本的語(yǔ)法錯(cuò)誤等。-n選項(xiàng)和-z同時(shí)存在的時(shí)候,-n起作用,-z不起作用。從流程上講不難理解,匯編等工作不完成,鏈接器沒(méi)有工作目標(biāo)也沒(méi)法完成鏈接。

            就編譯器本身來(lái)說(shuō),它只要讀取C、C++、匯編等文件進(jìn)行處理就完成任務(wù)了,所以編譯器的控制選項(xiàng)并不多,一般情況下一個(gè)-z選項(xiàng)就足夠我們完成從編譯程序到生成目標(biāo)的編譯器控制效果了。相比較而言,C、C++這些語(yǔ)言本身就復(fù)雜的多了,并且因?yàn)橛泻芏鄠€(gè)版本的存在,難免有一些小混亂的存在,所以編譯器里與語(yǔ)言本身相關(guān)的選項(xiàng)就顯得特別多,以便我們來(lái)對(duì)語(yǔ)言的特性等進(jìn)行正確使用,下面就看看編譯器里與語(yǔ)言有關(guān)的選項(xiàng):

            表2?編譯器的

          別名

          控制效果

          --cpp_default

          -fg

          通知編譯器把所有的.c文件也當(dāng)作C++源程序看待。如果不使用這個(gè)默認(rèn)選項(xiàng)的話(huà),也可以分別指定不同后綴名的文件,例如--asm_file=filename,--c_file=filename,-cpp_file=filename--obj_file=filename。舉例說(shuō)明,現(xiàn)在我們有個(gè)文件叫file.s,那么使用--c_file=file.s的話(huà)能使得編譯器按照處理C文件的方式處理file.s。

          --embedded_cpp

          -pe

          使能嵌入式的C++模式。嵌入式C++是標(biāo)準(zhǔn)的C++的一個(gè)子集,由NEC,?Hitachi,?Fujitsu,以及?Toshiba等幾個(gè)公司在十幾年前制定,移除了模版、異常處理、運(yùn)行時(shí)類(lèi)型、新式C++轉(zhuǎn)型、可變關(guān)鍵字、多重繼承、虛擬繼承等C++特性。

          --exceptions

          ?

          使能標(biāo)準(zhǔn)C++語(yǔ)言中的異常處理。默認(rèn)情況下編譯器是不使能C++的異常處理的,如果啟用了這個(gè)選項(xiàng)的話(huà),則所有的C++源程序都在啟用了異常處理的情況下進(jìn)行編譯。

          --float_operations_allowed

          ={none|all|32|64}

          ?

          限制浮點(diǎn)類(lèi)型的操作,包括完全禁止、允許32位浮點(diǎn)類(lèi)型運(yùn)行、允許64位浮點(diǎn)類(lèi)型運(yùn)行和同時(shí)允許32位與64位的浮點(diǎn)運(yùn)算被編譯。目前C28xFPU不支持64位浮點(diǎn)的硬件運(yùn)算,如果非要使用的話(huà),需要編譯器調(diào)用相關(guān)的算法庫(kù)在編譯時(shí)進(jìn)行支持,效率不高。

          --gcc

          ?

          GCC提供了在標(biāo)準(zhǔn)C/C++里面沒(méi)有的一些特性,在嵌入式系統(tǒng)的開(kāi)發(fā)中應(yīng)用比較廣泛,所以編譯器也提供了對(duì)它的支持。關(guān)于GCC的特點(diǎn),可以參考http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/C-Extensions.html#C-Extensions

          --gen_acp_raw

          -pl

          使用這個(gè)選項(xiàng)可以使得編譯器在編譯時(shí)輸出原始列表文件,從而更好地幫助我們理解編譯的過(guò)程。這個(gè)原始列表文件里面包含了源程序里的行信息、頭文件的切入和切出信息、診斷信息、交叉編譯時(shí)預(yù)處理的源文件中相關(guān)語(yǔ)句的信息等。這個(gè)文件的內(nèi)容比較詳細(xì),有興趣的網(wǎng)友可以啟用這個(gè)選項(xiàng)之后編譯看看。它包含了一些標(biāo)識(shí)符,以幫助我們更快定位和理解相關(guān)的信息,包括:

          N:對(duì)應(yīng)的源程序的行數(shù)

          X:源程序中的擴(kuò)展行數(shù),交叉編譯時(shí)會(huì)遇到。

          S:跳過(guò)的行數(shù),例如使用#if這樣的預(yù)編譯指令時(shí),判斷條件為假對(duì)應(yīng)的不會(huì)被編譯的行。

          L:源程序中跳轉(zhuǎn)對(duì)應(yīng)的行數(shù),例如調(diào)用一個(gè)頭文件中定義的函數(shù),或者從頭文件中的函數(shù)定義返回。

          E:錯(cuò)誤

          F:關(guān)鍵錯(cuò)誤

          R:提醒

          W:警告??????????????????

          --gen_acp_xref

          -px

          輸出交叉參考的信息列表,包括文件名、行數(shù)、列數(shù),交叉引用產(chǎn)生的聲明、修改、調(diào)用等信息。

          --keep_unneeded_statics

          ?

          保留定義了但是違背使用的靜態(tài)變量,例如這些變量是我們出于調(diào)試目的設(shè)置的,所以不希望被編譯器給清除掉。這個(gè)選項(xiàng)不能阻止編譯器刪除未被使用的靜態(tài)函數(shù)。

          --kr_compatible

          -pk

          保持與K&R版本C語(yǔ)言的兼容性,只能作用于C程序上,對(duì)C++程序無(wú)效。

          --multibyte_chars

          -pc

          允許在注釋、字符串常量和字符常量中使用多字節(jié)字符。多字節(jié)字符和Unicode是相對(duì)的,Unicode字符都使用兩個(gè)字節(jié)編碼的編碼模,多字節(jié)字符則是可變的。這個(gè)選項(xiàng)有時(shí)候是直觀的,例如用英語(yǔ)以外的其它語(yǔ)言編寫(xiě)的注釋?zhuān)俅蜷_(kāi)的時(shí)候在CCS里面可能就全變成?????這樣的了。

          --no_inlining

          -pi

          禁止編譯器對(duì)函數(shù)進(jìn)行內(nèi)聯(lián)。但是在啟用了-O3編譯器優(yōu)化選項(xiàng)的情況下,編譯器仍然會(huì)執(zhí)行自動(dòng)內(nèi)聯(lián)功能。

          --no_intrinsics

          -pn

          禁止使用編譯器內(nèi)建的intrinsics函數(shù)。這些函數(shù)一般是匯編語(yǔ)言寫(xiě)成的,例如在C28x上調(diào)用IQMath庫(kù)里的_IQMpy編程時(shí),編程產(chǎn)生的匯編語(yǔ)言就可以直接使用內(nèi)建的__qmpy32(a32,?b32,?q)完成對(duì)數(shù)學(xué)表的調(diào)用。

          --program_level_compile

          -pm

          啟用程序級(jí)別的優(yōu)化。在這種優(yōu)化條件下,編譯器會(huì)把所有的源程序集合到一個(gè)模塊中進(jìn)行編譯,這樣它就能清楚了解所有的代碼的來(lái)龍去脈,從而更好地完成程序的優(yōu)化。例如,一個(gè)有內(nèi)容的函數(shù)既沒(méi)有被main()函數(shù)調(diào)用,也沒(méi)有被其它函數(shù)調(diào)用的話(huà),編譯器就把它優(yōu)化掉了。

          --relaxed_ansi

          -pr

          使用編譯器的松弛模式。在標(biāo)準(zhǔn)ISO?C模式下,大部分語(yǔ)法上的違規(guī)會(huì)被當(dāng)作錯(cuò)誤輸出,從而使得我們的編譯無(wú)法繼續(xù)下去。如果我們有時(shí)需要使用這樣的用法的話(huà),就使用松弛模式,使得這些違規(guī)被作為警告信息輸出,雖然有警告,但是不會(huì)妨礙程序的編譯。當(dāng)然我們要做的驗(yàn)證和確認(rèn)我們的程序確實(shí)達(dá)到了我們的預(yù)期功能。

          --rtti

          -rtti

          使用C++的運(yùn)行時(shí)類(lèi)型。

          --static_template_instantiation

          ?

          使用內(nèi)部連接例化所有的模版。

          --strict_ansi

          -ps

          使用嚴(yán)格的ANSI/ISO?C/C++模式,這種模式與K&R版本的C是不兼容的。

            從表2里也可以看出,大部分特性是與C++編程息息相關(guān)的,如果僅僅使用C進(jìn)行一些編程的話(huà),對(duì)編譯器的編程的使用確實(shí)要簡(jiǎn)單了不少。

          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


          c++相關(guān)文章:c++教程




          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();