【发布时间】:2014-12-19 13:14:13
【问题描述】:
谁能解释下面的函数声明。
inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline));
【问题讨论】:
-
控制台中的磁带:man gcc ;-)
标签: c linux function linux-device-driver gcc-extensions
谁能解释下面的函数声明。
inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline));
【问题讨论】:
标签: c linux function linux-device-driver gcc-extensions
always_inline 和 pure 是 gcc 函数属性。来自 gcc documentation:
always_inline
通常,除非指定优化,否则函数不会内联。对于声明为内联的函数,此属性内联函数独立于其他适用于内联的任何限制。未能内联此类功能被诊断为错误。请注意,如果间接调用此类函数,编译器可能会或可能不会内联它,具体取决于优化级别,并且可能会或可能不会诊断出内联间接调用失败。
您的 MY_FUNC 函数已经具有 inline 函数说明符,但在 C 中,inline 只是内联的建议,编译器没有内联函数的义务。
纯的
许多函数除了返回值之外没有任何影响,它们的返回值仅取决于参数和/或全局变量。这样的函数可以像算术运算符一样进行公共子表达式消除和循环优化。这些函数应该用pure属性声明。
【讨论】:
inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline));
inline -- 内联声明的函数,作为优化提示或用于链接目的。uint64_t -- 固定宽度的返回类型。参考<stdint.h>。MY_FUNC -- 函数名unsigned long -- 参数类型param -- 参数名称__attribute__ ((pure, always_inline)) -- GCC 编译器特定的属性。看看谁忍了他们的描述。以“过于宽泛”为由投票结束。
【讨论】: