繁体   English   中英

C89:声明大 const 数组,然后使用它,然后初始化它

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM