亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3632 | 回復(fù): 2
打印 上一主題 下一主題

.h中定義的static函數(shù)能不能取代inline呢? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-01-26 18:37 |只看該作者 |倒序?yàn)g覽
我一直都用C++編譯器的,現(xiàn)在開(kāi)始用純C寫點(diǎn)東西,遇到不少問(wèn)題,請(qǐng)教下大家,先謝謝。
   
   我這現(xiàn)在有個(gè)宏

#define RX_GET_ELEM(ptr, elem_size, n) ((void*)((rx_byte*)ptr + ((n) * elem_size)))

我確實(shí)不太喜歡這種容易出錯(cuò)的東西用宏

我對(duì)static函數(shù)的理解就是在單獨(dú)的編譯單元內(nèi)生成一份copy,所以鏈接時(shí)候兩個(gè)同樣的編譯單元出現(xiàn)同樣的符號(hào)就沒(méi)問(wèn)題了,例如
a.c和b.c內(nèi)都定義了
static void test() { int x = 0; }
那么鏈接時(shí)候是不會(huì)出問(wèn)題的。

但是我現(xiàn)在的做法是再一個(gè)公用的頭文件內(nèi)(例如:rx_misc.h)聲明并定義
static void* RX_GET_ELEM(void *ptr, size_t elem_size, size_t idx)
{
                return ((void*)((rx_byte*)ptr + ((idx) * elem_size)));
               
}

我之所以認(rèn)為它們可以取代inline的做法是因?yàn)橐话憔幾g器做函數(shù)展開(kāi)的前提是此函數(shù)的定義在編譯單元內(nèi)可見(jiàn),例如我這個(gè)在頭文件上定義的函數(shù)就是這樣的,vc8也確實(shí)可以做優(yōu)化。

請(qǐng)問(wèn)這樣做是不是可行的?

btw:因?yàn)槲也挥胕nline的目的也是希望它們?cè)诰幾g器間移植
     即使編譯器不能做優(yōu)化,至少它應(yīng)該保證我這么定義永遠(yuǎn)是可以編譯通過(guò)的

[ 本帖最后由 Solidus 于 2008-1-26 18:44 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2008-01-26 18:51 |只看該作者
只要在包含這個(gè)頭文件的源文件中沒(méi)有定義相同的函數(shù),編譯就不會(huì)出錯(cuò),但是編譯器是否在調(diào)用這個(gè)函數(shù)的地方擴(kuò)展該函數(shù)則取決于優(yōu)化了,跟標(biāo)準(zhǔn)相差就遠(yuǎn)點(diǎn)了。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2008-01-28 20:10 |只看該作者

回復(fù) #1 Solidus 的帖子

如果聲明為static,在每個(gè)包含rx_misc.h的.c文件中都會(huì)定義有一個(gè)RX_GET_ELEM函數(shù),連接的時(shí)候就會(huì)出現(xiàn)“重定義”錯(cuò)誤。
聲明為static之后,RX_GET_ELEM對(duì)外是不可見(jiàn)的,所以連接可以順利通過(guò)。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP