音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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)
加'_"和不加有什么區(qū)別啊?
    .text
promEntry:
romInit:
_romInit:
    .set    noreorder
    RVECENT(__romInit,0)            /* PROM entry point */
romWarmInit:
_romWarmInit:


romInit:和_romInit:有什么區(qū)別啊?
謝謝!
這里是mips的匯編代碼一部分。

GOOD Luck!

2樓: >>參與討論
liyuanhua
RE:
沒(méi)有什么區(qū)別,只是不同的名字而已,有人習(xí)慣用romInit,有人也習(xí)慣用_romInit,這里只是支持這兩種習(xí)慣而已

3樓: >>參與討論
rockos
老了,沒(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樓: >>參與討論
平常人
當(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樓: >>參與討論
中喜
Thanks
Thank you!
我們使用的vxworks的bootloader中的匯編(MIPS),我想應(yīng)該就是樓上摟上的大俠講的那樣。
謝謝

6樓: >>參與討論
kane
我也借寶地問(wèn)一個(gè)相關(guān)的問(wèn)題
那么請(qǐng)問(wèn)加雙下劃線__的又有什么不同呢?謝謝!

7樓: >>參與討論
平常人
這是由編譯器廠家決定的
加多少個(gè)下劃線沒(méi)有特別的意義,隨你喜歡。

8樓: >>參與討論
kane
但我注意到
在同一個(gè)文件或項(xiàng)目中有的符號(hào)前用一個(gè)下劃線,有的符號(hào)前用兩個(gè)下劃線,似乎應(yīng)有區(qū)別。

9樓: >>參與討論
rockos
re
兩個(gè)下劃線的函數(shù)意思是:

該函數(shù)請(qǐng)勿隨意使用, 否則后果自負(fù)!!

10樓: >>參與討論
mmxopq
把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
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
有點(diǎn)印象,似乎就是下劃線越多越低級(jí)。
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求助,怎么修改能改變運(yùn)行后的uclinux下的文件結(jié)構(gòu)
我的rtx tiny 為什么跑不起來(lái)
winCE的問(wèn)題大家交流
請(qǐng)問(wèn)SCCB總線兼容I2C嗎?
有做過(guò)網(wǎng)卡驅(qū)動(dòng)的朋友嗎? 請(qǐng)教一個(gè)錯(cuò)誤現(xiàn)象
免費(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)