linux内核.h文件中定义的宏
macros defined in linux kernel.h file
在堆栈溢出时,我遇到了一个问题什么是":-"在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编译,但在visualstudio上失败
仔细阅读最佳答案:
该宏的名称有些错误;应该更像
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
。
相关文章:
- 告诉CMake链接到自定义文件夹中的Boost
- 通过cMake使用具有自定义文件扩展名的共享库
- 威纳派读取自定义文件或文件夹的所有访问权限
- 使用命令列表解析自定义文件
- 单独的类声明和方法定义文件问题
- Qt解析自定义文件格式
- 将单独的头文件和类定义文件链接到主函数文件 - G++ 返回重载"undefined reference to"构造函数
- FAT32和NTF中的自定义文件属性
- 如何在没有"fatal error: Wt/WApplication: No such file or directory"的情况下将wt安装到自定义文件夹中
- C++ while 循环在自定义文件结构中
- QT C 读取自定义文件结构
- gcc 是否有编译指示来定义文件类型/编译器
- C/C++ 中的跨平台自定义文件头
- 使用头文件和类定义文件时未解决的外部符号错误
- 将此c++代码分解为单独的类规范文件和函数定义文件
- 自定义文件类中fstream对象的生存期
- 如何使用BinaryReader类使用C#读取自定义文件(C++)
- 提供带有libjpeg的自定义文件IO
- C++模块定义文件头内联符号
- 错误:未定义文件中的第一个引用符号