内联函数,指向变量的指针

时间:2018-10-31 01:41:20

标签: c structure inline

我试图了解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;
}

换句话说,代码是否需要取消对结构的指针的引用,或者是否理解仅需要用结构代替它?

在嵌入式应用程序中,这将在运行时产生巨大的差异。

1 个答案:

答案 0 :(得分:0)

仅要求编译器生成可实现语言语义所要求的结果的代码。特定的编译器如何实现完全取决于实现。甚至有可能根本不会内联代码。

要确定特定的编译器将如何翻译此代码,可以指示其输出所生成代码的程序集列表,也可以在调试器中检查代码的反汇编。取决于优化级别等编译器选项,生成的代码也可能有很大不同。