【发布时间】:2014-04-30 01:02:41
【问题描述】:
有许多全局变量,例如 someglobalvalue1、someglobalvalue2 等,它们是从我正在开发的应用程序的不同部分动态更新的。在我目前正在处理的部分中,我需要将这些变量收集到一个整数数组中。因为在不同的组中有很多这些变量,所以我有单独的函数,如 GetGroupOne()、GetGroupTwo() 等,将全局变量插入数组并将其返回给主函数。我将此页面用作如何从函数返回 int 数组的指南:http://www.tutorialspoint.com/cprogramming/c_return_arrays_from_function.htm
例如:
int main() {
int *array;
array = GetGroupOne();
/* do stuff with array */
return 0;
}
int * GetGroupOne() {
static int array[GROUP_ONE_LENGTH] = { someglobalvalue1, someglobalvalue2, someglobalvalue3 };
return array;
}
所以,尝试编译它(顺便说一下,我仅限于 C90 编译器)得到这个错误:
尝试使用 const 初始化变量时出现“初始化元素不是常量”错误
所以,我确实找到了Error "initializer element is not constant" when trying to initialize variable with const 和其他似乎暗示我试图做的事情,使用全局初始化,是不可能的。所以我硬着头皮做了这个:
int * GetGroupOne() {
static int array[GROUP_ONE_LENGTH];
array[0] = someglobalvalue1;
array[1] = someglobalvalue2;
array[2] = someglobalvalue3;
/* etc... */
return array;
}
现在,这工作,但它非常丑陋,看着它伤害了我的灵魂。特别是因为有多个组,其中一些有超过一百个条目,所以我必须将每个全局单独插入到数组中。我知道如何在高级语言中处理这个问题,但是 C 对我来说仍然有点神秘。但我认为必须有一些更好的方法来处理这个问题。任何人都可以将我推向正确的方向吗?
谢谢。
【问题讨论】:
-
为什么你的程序设计得如此糟糕,以至于它有数百个全局变量?
-
静态变量每次都不初始化。并且您的静态数组包含值。因此,最好坚持使用您的解决方案 2 或阅读 David 的解决方案。但是一个好的设计不需要(或至少很难)需要全局变量。
-
为什么不以数组开头?
-
要扩展 Paul 的建议,您可以将全局变量定义为数组的成员 ::
int array[3]; ... #define someglobalvar1 array[0] ... -
Ooga - 我无法回答这个问题,我没有设计它。 Paul - 当我没有在我的代码中声明全局变量并且无法控制它时,我不清楚如何创建一个全局数组。