2012-09-19 43 views

回答

4

你不能有選擇地告訴編譯器內聯一些調用,至少不能移植。

請注意,inline只是對編譯器的一個建議,編譯器可能會也可能不會遵從將內聯函數的主體內聯到調用點的建議,但編譯器會放寬像One定義規則這樣的一些條件對於這樣的功能。

0

我覺得要求不是非常有用,並且回答你的問題是:第

但是,您可以通過使用宏實現類似的意思:

#define f_inline do { int i = 1 + 2; } while(0) 

void f() { 
    f_inline; 
} 

您現在可以如果您想要強制f的代碼在線應用,請使用f_inline;

0

這並不特別重要內聯函數是否你調用的。見What does __inline__ mean ?。我只需編寫非內聯函數,並讓編譯器決定如何以最佳方式內聯它。

0

如果編譯器無條件榮譽您使用或不使用inline關鍵字,或者如果您使用的是gcc擴展__attribute__((__always_inline__))__attribute__(__noinline__)),那麼你可以達到你想要的東西用一個簡單的包裝功能:

static inline int foo_inline(int a, int b) 
{ 
    /* ... */ 
} 

static int foo_noninline(int a, int b) 
{ 
    return foo_inline(a, b); 
} 

我用inline關鍵字編寫了它,但由於編譯器通常只會將它視爲提示,甚至忽略它,所以您可能需要gcc屬性版本。

相關問題