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标准定义。 –