inline 在使用 const 函数属性时有什么影响吗?

Does inline have any effect when using const function attribute?

使用这个功能

__attribute_const__ static inline int mul(int a, int b)
{
    return a * b;
}

对比这个

__attribute_const__ static int mul(int a, int b)
{
    return a * b;
}

在使用 const 属性时是否有理由使用内联?在这里使用内联对编译器有帮助吗?

内联函数在调用它们的地方(在编译时)被替换,属性 const 告诉编译器可以避免使用相同参数进一步调用函数,因为结果将是相同的。如果您将 const 函数标记为内联,那么您将失去 const 行为,因为内联本身并不是一个“调用”,并且 const 优化依赖于重复调用

None 的属性在这里一定有帮助,因为如果编译器如此决定,无论 inline 无论如何都会内联 static 函数,并且因为它是 static 函数,那么源将出现在使用它的翻译单元中,然后编译器也可以看到它计算了两个参数的乘积,并且编译器足够聪明,可以得出结论,两个参数的乘积仅取决于这些参数的值。

inline 的情况在 inline/extern inline 的情况下变得更有趣。此外,当编译器 无法 看到代码(因为该函数仅在另一个翻译单元中定义)或无法正确推断其行为时,属性案例变得更加有趣 - 例如 const 函数可能会触及一些在程序开头初始化的常见查找表,但编译器无法确保它们保持不变。