|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
加'_"和不加有什么區(qū)別啊? |
| 作者:中喜 欄目:嵌入式系統(tǒng) |
.text promEntry: romInit: _romInit: .set noreorder RVECENT(__romInit,0) /* PROM entry point */ romWarmInit: _romWarmInit: romInit:和_romInit:有什么區(qū)別啊? 謝謝! 這里是mips的匯編代碼一部分。 GOOD Luck! |
| 2樓: | >>參與討論 |
| 作者: liyuanhua 于 2006/7/24 16:08:00 發(fā)布:
RE: 沒(méi)有什么區(qū)別,只是不同的名字而已,有人習(xí)慣用romInit,有人也習(xí)慣用_romInit,這里只是支持這兩種習(xí)慣而已 |
|
| 3樓: | >>參與討論 |
| 作者: rockos 于 2006/7/24 16:29:00 發(fā)布:
老了,沒(méi)人用了 在符號(hào)前面加"_"和不加"_"其實(shí)沒(méi)有什么區(qū)別,要詳細(xì)研究這個(gè)問(wèn)題需要追溯一下C語(yǔ)言的歷史. 最初,大多數(shù)C語(yǔ)言編譯器都在函數(shù)名前面加上一個(gè)下劃線, 在調(diào)用函數(shù)時(shí)也自動(dòng)加一個(gè)下劃線, 例如: void f() { g(); .... } 這段代碼被編譯成如下的匯編代碼(作為例子, 使用x86匯編指令): _f proc near .... call _g .... ret _f endp export _f 可見(jiàn), 無(wú)論是函數(shù)f(), 還是由f()調(diào)用的函數(shù)g(), 它們前面都增加了下劃線字符. 因此如果g()使用匯編語(yǔ)言實(shí)現(xiàn), 就一定要在函數(shù)在前面加上一個(gè)下劃線, 即定義為: _g proc near ... ret _g endp export _g 否則C語(yǔ)言就無(wú)法引用了. 全局變量定義也遵守同樣的約定。 現(xiàn)在絕大多數(shù)C語(yǔ)言編譯器已經(jīng)不使用這個(gè)約定了(仍有些編譯器使用編譯開(kāi)關(guān)控制是否使用這個(gè)舊式約定), 所以在匯編語(yǔ)言中為符號(hào)加上下劃線純粹是歷史原因. 如果想嘗試一下,建議找一個(gè)Turbo C 2.0來(lái)嘗試一次,呵呵!! |
|
| 4樓: | >>參與討論 |
| 作者: 平常人 于 2006/7/24 23:00:00 發(fā)布:
當(dāng)C與匯編混用時(shí)非常有用 遵守樓上說(shuō)的老規(guī)矩,當(dāng)C與匯編混用時(shí)非常有用,因?yàn)槿魏稳硕伎梢詤^(qū)分,哪個(gè)函數(shù)是C寫(xiě)的,哪個(gè)函數(shù)是會(huì)編寫(xiě)的?尤其是在調(diào)試程序的時(shí)候。 |
|
| 5樓: | >>參與討論 |
| 作者: 中喜 于 2006/7/28 11:52:00 發(fā)布:
Thanks Thank you! 我們使用的vxworks的bootloader中的匯編(MIPS),我想應(yīng)該就是樓上摟上的大俠講的那樣。 謝謝 |
|
| 6樓: | >>參與討論 |
| 作者: kane 于 2006/8/2 14:41:00 發(fā)布:
我也借寶地問(wèn)一個(gè)相關(guān)的問(wèn)題 那么請(qǐng)問(wèn)加雙下劃線__的又有什么不同呢?謝謝! |
|
| 7樓: | >>參與討論 |
| 作者: 平常人 于 2006/8/2 15:08:00 發(fā)布:
這是由編譯器廠家決定的 加多少個(gè)下劃線沒(méi)有特別的意義,隨你喜歡。 |
|
| 8樓: | >>參與討論 |
| 作者: kane 于 2006/8/2 15:54:00 發(fā)布:
但我注意到 在同一個(gè)文件或項(xiàng)目中有的符號(hào)前用一個(gè)下劃線,有的符號(hào)前用兩個(gè)下劃線,似乎應(yīng)有區(qū)別。 |
|
| 9樓: | >>參與討論 |
| 作者: rockos 于 2006/8/3 20:49:00 發(fā)布:
re 兩個(gè)下劃線的函數(shù)意思是: 該函數(shù)請(qǐng)勿隨意使用, 否則后果自負(fù)!! |
|
| 10樓: | >>參與討論 |
| 作者: mmxopq 于 2006/8/10 13:29:00 發(fā)布:
把c編譯成匯編 當(dāng)把c編譯成匯編的時(shí)候 可以看到函數(shù)前加了個(gè)下劃線 所以如果 c和匯編混合編譯。 如果匯編程序?yàn)?br>_f proc near .... call _g .... ret _f endp 在c中調(diào)用匯編的函數(shù)可直接調(diào)用f() |
|
| 11樓: | >>參與討論 |
| 作者: rockos 于 2006/8/10 17:39:00 發(fā)布:
re 這個(gè)規(guī)則也不是絕對(duì)的, 比如High C/C++, Watcom C/C++和ARM的官方編譯器armcc, 這些編譯默認(rèn)是不在符號(hào)前加前導(dǎo)下劃線"_"的. 在匯編語(yǔ)言中同一位置同時(shí)定義帶下劃線和不帶下劃線的符號(hào), 并同時(shí)export, 其主要目的是為了對(duì)C語(yǔ)言提供統(tǒng)一的API —— 無(wú)論C編譯器在生成符號(hào)表時(shí)是否在公共字段名前面加或不加下劃線,匯編語(yǔ)言API總是提供相同的入口。實(shí)際上總是生成兩個(gè)完全相同的符號(hào),romInit和_romInit,在C語(yǔ)言中總是可以這樣引用: romInit(); C編譯器要求前導(dǎo)下"_"時(shí)生成對(duì)_romInit調(diào)用, 不要求時(shí)生成對(duì)romInit調(diào)用,它們?cè)谕粋(gè)地址上。 對(duì)于有兩條下劃線的符號(hào)(不是段名),通常標(biāo)記該函數(shù)是一種內(nèi)部符號(hào)(函數(shù)或變量),將來(lái)可能會(huì)在沒(méi)有任何通知的情況下更改其含義,如參數(shù)或返回值,甚至被刪除,編寫(xiě)應(yīng)用程序時(shí)不應(yīng)當(dāng)引用這些符號(hào)。 |
|
| 12樓: | >>參與討論 |
| 作者: gbchang 于 2006/8/14 15:54:00 發(fā)布:
有點(diǎn)印象,似乎就是下劃線越多越低級(jí)。 |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |