例如,我怎样才能摆脱warning: unnamed struct/union that defines no instances
源文件中的“”,而不是通过编译器命令行选项。
我想定义一个 C 宏 CONST_BUG_ON
,我用它在编译时检查一些 const 值。
#define CONST_BUG_ON(e) struct {int a:!(e);}
它发出警告warning: unnamed struct/union that defines no instances
,但在这种情况下,它不是一个真正的问题。
谢谢汤姆坦纳
#define CONST_BUG_ON_3(e, l) struct buggy##l {int a:!(e);}
#define CONST_BUG_ON_2(e, l) CONST_BUG_ON_3(e, l)
#define CONST_BUG_ON(e) CONST_BUG_ON_2(e, __LINE__)
这很好,但仍然存在一些问题:如果 filea
的第 6 行包含 CONST_BUG_ON(e),并且 file 包含a
在 file 中b
,并且文件的第 6 行也b
包含 CONST_BUG_ON(e),则 gcc 会抱怨重新定义错误。使用__COUNTER__
instade__LINE__
可能完美,但我的旧编译器不支持__COUNTER__
.
谢谢 Basile Starynkevitch
#define CONST_BUG_ON(e) do { \
int tab[__builtin_constant_p(e)?1:-1] = {0}; \
if (tab[0]) abort(); } while (0)
这是一个C语句,只能放在函数中,我很想在函数外使用它。