在linux kernel.h文件中定义的宏
在堆栈溢出我遇到了一个问题什么是“: - !!” 在C代码?
> #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
> #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))
出于好奇,我想知道如何使用这些宏?
int main()
{
BUILD_BUG_ON_ZERO(0);
return 0;
}
在上面的代码中,它给出了一个错误,即类型名称是不允许的。
编辑:代码编译在Linux上使用GCC但在视觉工作室失败
仔细阅读最佳答案:
这个宏有点错误; 它应该更像BUILD_BUG_OR_ZERO
,而不是...ON_ZERO
所以在参数非零时编译失败:
int main()
{
BUILD_BUG_ON_ZERO(1);
return 0;
}
http://ideone.com/TI97r3
至于实际用法:
int main()
{
BUILD_BUG_ON_ZERO(sizeof(int) != 4); // we need int to be 4 bytes, stop compilation otherwise
return 0;
}
至于C ++:这是一个C编译器,根本不用C ++编译。
在C ++ 11中,您可以使用static_assert
。