【发布时间】:2015-08-08 00:11:49
【问题描述】:
我想定义一个结构数组,我想它的第一个元素是这个元素在数组中的偏移量。它必须在编译时完成。我可以自动生成作为一种选择。我想知道是否有更简单的方法?
my_array[] = { {0, ...}, {1, ...}, ... }
我有一些#ifdefs 从初始化中删除了一些项目。因此,如果可能的话,我想忽略它们,因此重新调整了偏移量。
【问题讨论】:
-
我把它改成了偏移量。这是 c 而不是 c++
-
gcc允许以__attribute__((constructor))作为扩展的函数。它们在main()之前被调用,允许你有效地任意初始化全局对象。 -
@Olaf:我已经看到当结构最终被视为链表并且您需要能够映射回包含元素的数组时使用的那种数字(偏移量)不知道数组起始地址的链表。这是一个奇怪的边缘案例类型的情况,而不是主线编码,但它偶尔会有所帮助。 (它通常也可以通过其他方式解决,但这本身并不是想要避免它的充分理由。)至于主要问题,我不相信有比代码生成或运行更好的选择 -时间修正。
-
如果使用gcc,你可能会想到
__COUNTER__宏和递归#includes。但这将极大地限制元素的数量。生成代码可能是更简单的方法。