使用宏用额外元素初始化数组

Initialize array with extra element using a macro

我根据宏以两种不同的方式初始化数组:

# if feature_enabled
const int v[4] = {1, 2, 3, 4};
#else
const int v[5] = {0, 1, 2, 3, 4};
#endif

问题在于赋值中的数据实际上是大矩阵,出于各种原因,仅复制数据并稍作修改(仅在数组开头多一个元素)并不是一个好的解决方案。

我想知道是否有一种方法可以做我在这里做的同样的事情,而无需基本上复制最后的 n-1 个元素。

如果不指定数组的大小,让其自动推导,可以条件性地在前面加上0:

const int v[] = {
# if feature_enabled
  0,
#endif
  1, 2, 3, 4
};

如果需要保持数组大小,则:

# if feature_enabled
const int v[4] = {
#else
const int v[5] = {0,
#endif
  1, 2, 3, 4
};