inline void myfunction(){
//something here
}
void main(){
void (*p)(void);
p = myfunction;
p();
}
不同的編譯器可以爲此生成哪種機器碼,以及在什麼情況下?內聯函數的函數指針C
inline void myfunction(){
//something here
}
void main(){
void (*p)(void);
p = myfunction;
p();
}
不同的編譯器可以爲此生成哪種機器碼,以及在什麼情況下?內聯函數的函數指針C
由於您的編譯器需要該函數的地址,因此它將生成目標代碼的獨立副本。
如果該函數在文件中的其他位置使用,它也可能在該源文件中生成該函數的內聯副本。 –
是 - 但它取決於你的編譯器和它的設置將會出現什麼副作用:
有不同的方法來定義內聯函數;任何給定類型的定義都可能肯定會發出獨立的對象代碼,絕對不會發出獨立的對象代碼,或者只在已知需要時才發出獨立的對象代碼。有時,這會導致目標代碼複製...
你的編譯器肯定會令功能的非內聯,但它也可以創建函數的兩個verions,一個內聯和一個非內嵌,都取決於你的編譯器。 –
@MichałWalenciak我的機器上只有gcc,我也問過其他的編譯器。 – Heeryu
@MichałWalenciak:測試只會告訴您您使用的C實現是否允許它。因爲這可能是C實現特定的擴展,所以它不會告訴你它是否由C標準定義。 –