當前位置:首頁 » 編程語言 » c語言inline

c語言inline

發布時間: 2022-12-28 18:19:54

㈠ vs2010,C語言,inline:為什麼函數前面加了個inline,然後就提示找不到exe了,去掉inline又可以了,怎麼回事

比如
int g(int x)
{
return x + x;
}

int f()
{
return g();
}

這樣f會調用g,然後g返回x + x給f,然後f繼續把那個值返回給調用者。

如果g是inline的話。f會被直接編譯成。

int f()
{
return x + x;
}

相當於把g執行的操作直接融合到f里。這樣減少了調用g消耗的時間,但同時也增大了f的尺寸。

這就是inline函數,也就是所謂的內聯函數。

---------

但是現在不是這樣了。

現在的編譯器會自動決定是否對函數進行上面的操作,而不是根據你前面加不加inline。

但是inline本身還是有另外一個意義:

一個可執行文件的cpp文件中一個函數只能被定義一次。如果你把函數定義在一個.h文件中並讓兩個cpp包含就會造成這個函數分別在兩個cpp中被定義產生錯誤。但是inline函數是允許在多個cpp中多次定義的,就解決了這個問題。

㈡ C語言關鍵字inline問題,求高人指點。

內聯inline是給編譯器的優化提示,如果一個函數被編譯成inline的話,那麼就會把函數裡面的代碼直接插入到調用這個函數的地方,而不是用調用函數的形式。如果函數體代碼很短的話,這樣會比較有效率,因為調用函數的過程也是需要消耗資源的。但是你inline只是給編譯器的提示,編譯器會根據實際情況自己決定到底要不要進行內聯,如果函數過大、有函數指針指向這個函數或者有遞歸的情況下編譯器都不會進行內聯。

㈢ C中函數inline定義問題,求解釋。。。。

你沒有給出具體源碼,所以只能猜,據我所知,有一種情況可能符合你的描述:
這種用法,同一個文件內的inline
test函數會被內聯展開,其他文件的test函數,會編譯成普通函數來調用。
根據你的提問可以理解為:abc.h中的test函數,被abc.h內聯展開。abc.c中的test函數,被abc,c調用,與abc.h裡面的test無關。如果還有def.c調用test,那麼調用那個的是abc.c中的。前提是abc.c和def.c不包含abc.h,如果包含abc.h那麼調用test函數的地方,會被abc.h中的test函數進行內聯展開。
GCC編譯器和
C99編譯器代碼有所不同,都可能能達到你描述代碼的要求,說可能是因為我只在gcc編譯器上編譯過類似代碼,c99的用法是網路文章說的,我沒試過,所以只能說可能。

㈣ C語言inline函數

普通的函數在調用的時候需要消耗棧空間,cpu和內存利用率會增高,c99中引入了inline關鍵字,可以在編譯的時候,在函數調用處直接把函數像宏一樣展開,這樣在增加代碼空間的情況下降低了cpu和內存的使用。

1、如果Inline函數定義在cpp/c文件中,則本文件里的函數調用會轉換為內聯代碼,但是其他文件的函數調用還是和普通函數一樣(gcc標准和c99標准有差別,有可能鏈接時會找不到函數符號)。

2、如果inline函數定義在.h文件中,則其他文件的函數調用也會轉換為內聯代碼。

3、由於內聯函數調用時候不會壓棧,所以函數不能是遞歸函數。

㈤ C語言中使用inline函數會降低cache命中率么

inline vs. __forceinline

MS Visual C++, 以及其它幾種編譯器,提供了一個非標準的用於控制函數內嵌(inline)的關鍵字,作為對標准關鍵字inline的補充。為什麼要添加這個非標准關鍵字呢?先讓我們來看看inline的一些局限,決定一個聲明為inline的函數是否真的進行嵌入,完全取決於編譯器的判斷。因此inline只是一個建議,在一些情況下,比如在一些內嵌函數中包含有循環或是這個函數體太大了,那麼即使這個函數聲明為inline,編譯器也將拒絕這個函數的嵌入。

與此相反,非標准關鍵字__forceinline 將忽略編譯器的判斷並強迫編譯器去嵌入一個它本該拒絕嵌入的函數。我不太肯定使用這個關鍵字的意義,它可能會使可執行文件變得臃腫並降低cache的命中率。幸運的是,在一些極端條件下,編譯器可能不接受__forceinline的任何請求。所以,一般情況下最好是使用標準的inline,inline是可移植的並且讓編譯器去做出「正確的選擇」。
__forceinline 只應在下列條件全為真的情況下使用:inline不被編譯器接受;你的代碼不需要向其它平台進行移植;並且你能肯定嵌入這個函數會提高性能。

熱點內容
知道一個伺服器的ip地址 發布:2025-07-04 14:20:33 瀏覽:597
蘋果7鎖屏密碼怎麼改 發布:2025-07-04 14:04:44 瀏覽:710
P三零是什麼配置 發布:2025-07-04 13:58:41 瀏覽:361
哪個安卓機有長方形home鍵 發布:2025-07-04 13:43:58 瀏覽:861
android腳本錄制 發布:2025-07-04 13:17:47 瀏覽:342
嵌入式和安卓哪個硬體成本高 發布:2025-07-04 13:05:56 瀏覽:229
360代理伺服器怎麼設置 發布:2025-07-04 12:49:49 瀏覽:515
iphone在哪清除緩存 發布:2025-07-04 12:49:38 瀏覽:340
代理訪問網址 發布:2025-07-04 12:47:50 瀏覽:400
分頁存儲的管理方式 發布:2025-07-04 12:47:45 瀏覽:495