我试图了解inline关键字如何与指向变量的指针一起工作。
考虑以下示例:
struct S
{
float a;
float b;
};
inline void foo (struct S *s)
{
s->a = 5;
}
void main()
{
struct S ss;
foo(&ss);
}
当编译器内联函数foo时,它将生成
void main()
{
struct S ss;
(&ss)->a = 5;
}
还是会生成
void main()
{
struct S ss;
ss.a = 5;
}
换句话说,代码是否需要取消对结构的指针的引用,或者是否理解仅需要用结构代替它?
在嵌入式应用程序中,这将在运行时产生巨大的差异。
答案 0 :(得分:0)
仅要求编译器生成可实现语言语义所要求的结果的代码。特定的编译器如何实现完全取决于实现。甚至有可能根本不会内联代码。
要确定特定的编译器将如何翻译此代码,可以指示其输出所生成代码的程序集列表,也可以在调试器中检查代码的反汇编。取决于优化级别等编译器选项,生成的代码也可能有很大不同。