c - BUILD_BUG_ON_ZERO 在简单的用户空间应用程序中不起作用

标签 c linux

我尝试在简单的用户空间应用程序中使用 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/

相关文章:

c - 引用指向结构体的指针,该结构体包含指向结构体指针的指针

计算器程序问题

c++ - "C"中的 char const 太长

c - 从文件中逐行读取并保存在列表中 C

linux - Jenkins 在重启电脑时丢失所有数据

linux - 需要有关 Linux Shell 脚本的帮助以查找字符串模式

c - 为什么给qsort()的比较函数需要返回三个不同的值呢?

linux - 在linux下创建文件

windows exe 到 linux exe

python - 用于删除第一个数字之前的字符串的脚本