[英]C89: declare large const array, then use it, then initialize it
这纯粹是为了可读性。 我想要一个非常大的常量数组,但这会使我的文件阅读起来不那么愉快。 因此,我希望在使用后初始化该数组,尽管我希望它保持不变。 我知道这可能是不可能的,但它可能也很常见。 那么有什么解决方法呢? 我现在不想创建单独的文件。
就像是 :
static const float array_of_values[1000];
float getValueFromArray(int index)
{
return array_of_values[index];
}
array_of_values = {0.123f, 0.456f, 0.789f ...};
首先,您所做的不是初始化,而是简单的分配。 而且您不能分配给数组。 而且你不能在函数之外有一般性的陈述。 如果要初始化数组,需要在定义数组的时候进行。
话虽如此,您必须记住(或了解)任何没有显式初始化的定义都是暂定的。
这意味着您可以创建一个暂定定义,基本上是为了让声明不碍事。 然后在源文件的稍后位置,您可以添加实际定义:
static const float array_of_values[1000];
float getValueFromArray(int index)
{
return array_of_values[index];
}
static const float array_of_values[] = { 0.123f, 0.456f, 0.789f, /* ... */ };
这些是使文件阅读起来不那么麻烦的常见解决方案:
static const float array_of_values[1000] = { MACRO }; // macro being an initalizer list
或者
static const float array_of_values[1000] =
{
#include "initlist.h"
};
我个人会推荐宏版本,因为它更灵活且不那么神秘。 您仍然可以在单独的头文件中声明宏。
还有一些暂定定义通常是个坏主意,因为它使代码变得神秘且难以阅读:
static const float array_of_values[1000];
float getValueFromArray(int index)
{
return array_of_values[index];
}
static const float array_of_values[1000] = {0.123f, 0.456f, 0.789f};
#include <stdio.h>
int main (void)
{
printf("%f\n", array_of_values[0]);
printf("%f\n", getValueFromArray(0));
}
尝试这个:
#include <stdio.h>
static float array_of_values_base[1000]; // the effective array has "base" in its identifier
static const float *array_of_values = array_of_values_base; // your array is now a pointer
float getValueFromArray(int index)
{
return array_of_values[index];
}
int main(void) {
array_of_values_base[0] = 0.123f;
array_of_values_base[1] = 0.456f;
array_of_values_base[2] = 0.789f;
// ...
printf("value at index 1 is %f\n", getValueFromArray(1));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.