我想定义一个结构数组,我希望它的第一个元素是数组中此元素的偏移量。它必须在编译时完成。我可以自动生成一个选项。我想知道是否有更简单的方法?
my_array[] = { {0, ...}, {1, ...}, ... }
我有一些#ifdef
从初始化中删除了一些项目。所以我想在可能的情况下忽略它们,因此重新调整偏移量。
答案 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"
};
显然,这是一个非常不方便的解决方案,因此我建议您编写一个简单的源代码生成器。