警告:always_inline函数可能不是inlinable

当我尝试包含一个.h文件,其中包含内联函数的定义

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

它给出了“警告:always_inline函数可能不是无法解决的[-Wattributes]”你可以帮助我,我正努力解决它。

对于内联声明的函数(!!!!) ,此属性内联函数独立于否则应用于内联的任何限制。

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

 # define FORCE_INLINE __attribute__((always_inline)) inline FORCE_INLINE vec3 operator- (vec3 a, vec3 b) { vec3 t = { ax-bx, ay-by, az-bz }; return t; } 

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

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

GCC手册规定

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

这是修订版的gcc 测试

最后,经过两天的努力,找到了解决方案,如下所示

这只是因为Makefile中的编译器(arm-none-eabi-gcc)选项CFLAGS= -D inline如果设置了这个标志,它会抛出警告__attribute__( ( always_inline ) ) __STATIC_INLINE(inline) uint32_t __SLA (int32_t o1, int32_t o2, int32_t o3)当试图包含一个由始终内联函数组成的.h文件时