2011-04-23 54 views
1

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}; 
+0

一般来说,foo可以是int或其他类型的数组 – Fernando 2011-04-23 11:04:48

+0

http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c – 2011-12-04 13:56:38

+0

http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c – 2011-12-04 14:03:10

回答

1

如果这INIT_VALUE不为0,则不能初始化你所提到的方式排列(以支持未知元素)。我不认为甚至有这样一个选项来实现它使用宏,可能正确的方法是一个循环来初始化(在函数中)该数组(memset也不会帮助,如果你的值看起来不像0xYXYXYXYX(所有字节都是相同的))

+0

问题是,foo是一个全局变量,必须在使用模块的任何函数之前进行初始化,因此使用函数来初始化它不是一个选项。 – Fernando 2011-04-23 13:37:37

+0

@Fernando - 问题是你不能。你有两个选择:1.在一个函数中初始化它(模块的初始化)2.每次帽子大小改变时修改源代码。 – MByD 2011-04-23 15:35:32