静态数组,其中的项(结构)知道它们在数组中的位置

时间:2012-02-23 09:29:31

标签: c arrays enums struct

我有一个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
然而,

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

1 个答案:

答案 0 :(得分:3)

您可以考虑X-macros

类似的东西:

<强> blah.x

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

<强>的main.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