警告:always_inline函数可能不是inlinable [-Wattributes]

时间:2015-09-07 06:45:10

标签: c

当我尝试将包含内联函数定义的.h文件包含为

__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SLA (int32_t o1, int32_t o2, int32_t o3)

它正在给出"警告:always_inline函数可能不是无法使用的[-Wattributes]"你能不能帮助我,我正努力解决它。

3 个答案:

答案 0 :(得分:25)

For functions declared inline(!!!!),此属性内联函数,与其他适用于内联的限制无关。

因此,当您设置属性而不声明函数内联时,您将收到这些警告。另外内联声明函数将使这些警告无效。行为gnu gcc / g ++ 5.30

# define FORCE_INLINE __attribute__((always_inline)) inline

FORCE_INLINE vec3 operator- (vec3 a, vec3 b) { vec3 t = { a.x-b.x, a.y-b.y, a.z-b.z }; return t; }

答案 1 :(得分:1)

警告说的是编译器并不总是乐于接受你的函数作为内联,或者它希望它被声明为内联。

我想__attribute__ ((always_inline))暗示inline - 在这种情况下,解析属性需要设置DECL_DECLARED_INLINE_P

GCC手册指定

  

always_inline通常,除非指定了优化,否则不会内联函数。对于内联声明的函数,即使未指定优化级别,此属性也会内联函数。

此处为修订版的gcc test

答案 2 :(得分:1)

最后,花了两天时间努力找到解决方案,因为它在

以下

这只是因为Makefile中的编译器(arm-none-eabi-gcc)选项 CFLAGS= -D inline如果设置了此标志,则在尝试包含始终为内联函数的.h文件时,会以__attribute__( ( always_inline ) ) __STATIC_INLINE(inline) uint32_t __SLA (int32_t o1, int32_t o2, int32_t o3)方式发出警告