c - 哪些项目(结构)知道它们在数组中的位置的静态数组

标签 c arrays enums struct

我有一个结构MyStruct 的静态数组。我需要通过索引访问数组,但我还需要每个 MyStruct 知道它的索引是什么。我目前使用以下代码:

enum { INDEX_FOO=0, INDEX_BAR, INDEX_BAZ };
struct MyStruct{ int index; const char* name; /* other data */ };
struct MyStruct values[]={
  { INDEX_FOO, "foo" /* ... */ },
  { INDEX_BAR, "bar" /* ... */ },
  { INDEX_BAZ, "baz" /* ... */ },
};
// requirement: for all i in {0,1,2}: values[i].index==i

然而,它复制了枚举索引。有没有办法做到这一点而不必保持枚举和数组同步?

最佳答案

您可能会考虑 X-macros为此。

类似于:

blah.x

X(FOO, "foo")
X(BAR, "bar")
X(BAZ, "baz")

ma​​in.c

#define X(a,b) INDEX_#a,
enum {
#include "blah.x"
};
#undef X

#define X(a,b) { INDEX_#a, b },
struct MyStruct values[]={
#include "blah.x"
};
#undef X

关于c - 哪些项目(结构)知道它们在数组中的位置的静态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9410217/

相关文章:

java - 通用方法参数: enum which implements an interface

c++ - 在头文件中定义的 c++ 枚举末尾添加一个值会强制重新编译吗?

c - 在 C 中执行具有共享信息的并行任务

c - 发送 uint8_t 且接收的值与客户端服务器 C 程序中的值不匹配

javascript - 返回函数中循环的所有结果 (JavaScript)

c# - 枚举变量的默认值是多少?

c - 如何在不使用 strcpy 函数的情况下将所有字符(包括 '\0' )从一个数组复制到另一个数组?

c - 如何在 c 中使用 fork 和 pipe 以及 execvp 将 stdout 重定向到 stdin?

c - C 中输入数字的平均值 - 总和始终为 0

ios - NSXMLParser\n 和\t 文本内部