我尝试在简单的用户空间应用程序中使用 BUILD_BUG_ON_ZERO,但编译失败
#include <stdio.h>
#define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); })))
int main()
{
int i;
BUILD_BUG_ON_ZERO(i);
return 0;
}
error: bit-field ‘<anonymous>’ width not an integer constant
#define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); })))
任何人都可以向我提供有关错误的提示吗?
最佳答案
宏BUILD_BUG_ON_ZERO
旨在与常量表达式一起使用,如中定义的
6.6 constant expression .
i
不是常量表达式 - 它只是一个局部变量。即使是 const
限定对象在 C 中也不被视为“常量表达式”(与 C++ 不同)。所以你必须使用:
- 文字值(例如
0
)或, - 宏(
#define value 0
)或, - 使用
enum
常量enum { value = 0,};
)
获取常量表达式
关于c - BUILD_BUG_ON_ZERO 在简单的用户空间应用程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60448690/