警告: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文件时