无法理解以下函数声明

时间:2014-12-19 13:14:13

标签: c linux function linux-device-driver gcc-extensions

任何人都可以解释以下函数声明。

inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline)); 

2 个答案:

答案 0 :(得分:2)

always_inlinepuregcc个函数属性。来自gcc documentation

  

always_inline

     

通常,除非指定了优化,否则不会内联函数。对于内联声明的函数,此属性内联函数,而不依赖于其他适用于内联的限制。未能内联此功能被诊断为错误。请注意,如果间接调用此类函数,则编译器可能会或可能不会根据优化级别对其进行内联,并且可能会或可能不会诊断内联间接调用。

您的MY_FUNC函数已经有inline函数说明符,但在C inline中只是内联的建议,编译器没有内联函数的义务。

  

     

除了返回值之外,许多函数都没有效果,它们的返回值仅取决于参数和/或全局变量。这样的函数可以像算术运算符那样经受公共子表达式消除和循环优化。应使用pure。

属性声明这些函数

答案 1 :(得分:0)

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特定于编译器的属性。参见忍者谁的描述。

投票结束为&#34;太广泛&#34;。