在编译时用单调序列初始化一个全局整数数组?

时间:2015-08-08 00:11:50

标签: c arrays embedded

我想定义一个结构数组,我希望它的第一个元素是数组中此元素的偏移量。它必须在编译时完成。我可以自动生成一个选项。我想知道是否有更简单的方法?

my_array[] = { {0, ...}, {1, ...}, ... }

我有一些#ifdef从初始化中删除了一些项目。所以我想在可能的情况下忽略它们,因此重新调整偏移量。

1 个答案:

答案 0 :(得分:1)

唯一的标准"解决方案(非常脏!)是__LINE__宏。让我们假设您的记录由此结构表示:

struct x { int v; };

1)定义一个扩展为一个元素初始值设定项的宏:

#define ELEM { __LINE__ - 1 }

2)创建一个文件(即" elem.c"),其中包含元素初始值设定项列表,每行一个,通过ELEM宏表示:

文件" elem.c":

ELEM,
ELEM,
ELEM,
...

3)按如下方式定义数组:

struct x my_array[] = {
#include "elem.c"
};

显然,这是一个非常不方便的解决方案,因此我建议您编写一个简单的源代码生成器。