2011-04-26 74 views

回答

1

當內聯函數,它們不存在於最終的編譯單元,以被稱爲符號函數。當內聯,編譯器代碼直接放入調用者,因此,如果這是內聯:

inline int multiply(int a, int b) 
    { 
     return a*b 
    } 

    int main() 
    { 
     printf("%i", multiply(a,b)); 
    } 

內聯乘導致在編譯產品的象徵走開,讓一樣的:

int main() 
    { 
     printf("%i", a * b); 
    } 

如果您始終希望該功能在最終產品中顯示爲符號,請刪除內聯。你的編譯器可能有一個開關,可以很容易地在構建中刪除內聯。

+0

是的,那是我決定的。不要直接在線處理。 – 2011-04-26 17:58:59

0

內聯函數正在內嵌內聯。如果被內聯,則沒有呼叫。他們將被拼接成二進制代碼,以便任何時候「正常」發生呼叫。

0

標準C(又名C99)有一個定義好的方式來使用函數發射符號。只需在一個編譯單元(.c文件)中將定義(使用inline)放入.h文件和不帶inline的聲明(無函數體)即可。

+0

Thaks爲您的答覆。我在vs2005上:(不能使用這個功能,因爲你知道vs2005不支持C99。 – 2011-04-26 20:40:21

+0

首先,請在你的問題中增加這些信息,如果你問了C,你會得到一個關於現在的標準,那麼對於你的特例'inline'本身就是C99的一部分,並沒有出現在C89中,從這個意義上說它是C89的擴展,你的編譯器文檔應該包含這些擴展的信息,通常使用'inline靜態'工作得很好。 – 2011-04-27 06:15:42