内联函数,指向变量的指针
Inline function, pointer to variable
我正在尝试了解 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;
}
换句话说,代码是否需要取消对结构指针的引用,或者它是否理解它只需要替换为结构?
在嵌入式应用程序中,这可能会对运行时间产生重大影响。
编译器只需要生成实现语言语义所需结果的代码。特定编译器如何实现完全取决于实现。甚至有可能代码根本不会内联
要确定您的特定编译器将如何翻译此代码,您可以指示它输出生成代码的汇编列表或在调试器中检查代码反汇编。生成的代码也可能因编译器选项(例如优化级别)而大不相同。
我正在尝试了解 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;
}
换句话说,代码是否需要取消对结构指针的引用,或者它是否理解它只需要替换为结构?
在嵌入式应用程序中,这可能会对运行时间产生重大影响。
编译器只需要生成实现语言语义所需结果的代码。特定编译器如何实现完全取决于实现。甚至有可能代码根本不会内联
要确定您的特定编译器将如何翻译此代码,您可以指示它输出生成代码的汇编列表或在调试器中检查代码反汇编。生成的代码也可能因编译器选项(例如优化级别)而大不相同。