【问题标题】:Initialize array at compile time在编译时初始化数组
【发布时间】:2011-04-23 10:57:17
【问题描述】:

foo 是一个必须初始化的全局整数数组。如果将来我将 SIZE 更改为 6,那么我将不得不在初始化列表中手动添加两个新的 INIT_VALUE 项。当SIZE的值改变时,是否有一个宏或其他东西可以用来在编译时自动修改初始化列表?

#define SIZE 4
#define INIT_VALUE 101

/* global variable that must be initialized */
int foo[SIZE] = {INIT_VALUE, 
                 INIT_VALUE, 
                 INIT_VALUE, 
                 INIT_VALUE};

【问题讨论】:

标签: c


【解决方案1】:

如果这个INIT_VALUE不为0,就不能按照你提到的方式初始化数组(支持未知元素)。我认为甚至没有这样的选择来使用宏来实现它,可能正确的方法是循环初始化(在函数中)数组(memset 也无济于事,如果你的值看起来不像0xYXYXYXYX(所有字节都相同))

【讨论】:

  • 问题是foo是一个全局变量,在使用模块的任何函数之前必须初始化,所以使用函数来初始化它不是一个选项。
  • @Fernando - 问题是你不能。您有两个选择:1. 在函数中初始化它(可能是模块的 init) 2. 每次帽子 size 更改时修改源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
相关资源
最近更新 更多