c - 基于枚举的静态数组 : C header

标签 c

我在 C 头文件中有一个值的枚举。我想定义一个额外的数组或一组值,其中每个值对应于一个枚举值。本质上,该数组将是一个查找表,用于查找与每个枚举值相关的一些信息。但是,我想在编译时在头文件中执行此操作。

什么是完成这个的好方法?

这是一个示例,说明如何使用两个单独的枚举或定义结构来完成它。有没有更优雅的方法来仅使用 op 枚举来完成此操作?

enum op {
op1,
op2,
op3
};

enum op_information {
op1_info = 0xff,
op2_info = 0xf3,
op3_info = 0xc1
}

更新:对我来说同样有值(value)的帮助是回答是否有任何方法可以使用引用静态定义数组。也就是说,而不是做:

ushort op_information = { 0xff, 0xf3, 0xc1 },

我们能做到吗

ushort op_information[3]
op_information[op.op1] = 0xff;
op_information[op.op2] = 0xf3;
op_information[op.op3] = 0xc1

在编译时?

最佳答案

使用 C99 指定的初始化程序:

ushort op_information[] = {
    [op1] = 0xff,
    [op2] = 0xf3,
    [op3] = 0xc1,
};

关于c - 基于枚举的静态数组 : C header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18644304/

相关文章:

c - BCD如何转换为十进制?

c - 正确运行几天后,solaris 中的 TCP 套接字接收超时 [8 - 15 天] 为什么?

c - 你如何在 const-correctness 下实现 strtol?

c - C 中正常 block 后检测到堆损坏

c - 超过超时限制后未从 alarm() 触发信号处理程序

c - 双指针获取导致段错误的字符串

c - 在 C 中,尝试使用将华氏度转换为开尔文的程序

c - 程序将不再找到 math.h

c++ - #define DATA 10 和 # if Defined DATA 之间的区别

c - 为什么 emacs 会显示这些警告和错误?