当编译器无法内联函数时,gcc' s inline __attribute__((__always_inline__))
会产生警告吗?
因为VS确实http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx:
If the compiler cannot inline a function declared with __forceinline,
it generates a level 1 warning.
答案 0 :(得分:2)
您需要-Winline
才能收到有关非内联函数的警告。
如果你想验证这一点,你可以尝试获取内联函数的地址(这会阻止它被内联),然后你应该看到一个警告。
#include <stdio.h>
static inline __attribute__ ((always_inline)) int add(int a, int b)
{
return a + b;
}
int main(void)
{
printf("%d\n", add(21, 21));
printf("%p\n", add);
return 0;
}
修改强>
我一直试图用上面的代码和其他例子产生警告但没有成功 - 似乎gcc和clang的当前版本的行为可能在这个领域发生了变化。如果我无法使用生成警告的更好示例进行编码,我将删除此答案。