【发布时间】:2015-01-03 08:09:50
【问题描述】:
我遇到了与 Jonathon Reinhart 在这里描述的相同的问题: Temporarily disable gcc warning on redefinition
那是因为我必须使用第三方库(仅限 C),它会引发大量这样的警告
Warning "__always_inline" redefined [enabled by default]
我想要的是这样的:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-W???"
#include "someheader.h"
#include "otherheader.h"
#pragma GCC diagnostic pop
有没有办法禁用 gcc 警告,默认情况下 启用 带有
#pragma GCC diagnostic ignored
编辑: 这是导致警告的块(文件:compiler.h):
#if defined(__CC_ARM)
# define __always_inline __forceinline
#elif (defined __GNUC__)
# define __always_inline inline __attribute__((__always_inline__))
#elif (defined __ICCARM__)
# define __always_inline _Pragma("inline=forced")
#endif
【问题讨论】:
-
他们使用这样的保留名称是不礼貌的。你有联系图书馆的供应商吗?您应该要求他们提供适合与 C 编译器一起使用的头文件。或者您可以使用 sed 或类似方法攻击提供的标头,并将宏更改为不使用保留名称。
-
“扫一扫”似乎是解决这个问题的次优解决方案
-
供应商 (Atmel) 被告知:asf.atmel.com/bugzilla/show_bug.cgi?id=3486 你是对的。清除错误不是最好的解决方案,但修复错误,例如为每个新版本的库一次又一次地重新定义完全相同的 __always_inline 行,就更糟了。