C中全局结构中的Const变量

时间:2014-01-07 12:11:42

标签: c struct header constants

我正在尝试在C中的全局结构中定义一组常量变量。到目前为止,我有一个头文件“params.h”:

#ifndef PARAMS_H_INCLUDED
#define PARAMS_H_INCLUDED

typedef struct Params_s {

    const int nSamples;
    //Some other constants here...

} Params;

extern const Params params;

#endif

我还有一个文件“params.c”来定义我的常量:

#include "params.h"

Params params = {

    8*1024, // nSamples
    //Some other constants here...

}

当我尝试使用这些常量来定义数组大小等内容时,会出现问题。如果,在第三个.c文件中,我写道:

#include "params.h"

//...Code here...

double p[params.nSamples];

然后我最终在数组大小上出现以下错误:

IntelliSense: expression must have a constant value

我是否错误地声明了我的常量?

3 个答案:

答案 0 :(得分:0)

是。这意味着它应该使用2, 3, 10之类的值,而不是变量n

我可以看到你的价值是不变的,所以你可以使用

#define NSAMPLES 8192

并使用

double p[NSAMPLES];

更好的方法是,进行动态分配

double* p = malloc(sizeof(double)*params.nSamples);

答案 1 :(得分:0)

在C89中,您不能声明具有可变长度的数组。如果你想这样做,你必须通过malloc或类似功能自己分配它,然后释放你的记忆。

如果您仍想这样做,可以使用C99,例如在gcc上使用标记--std=c99进行编译。它将允许您声明此类数组。

正如其他人所说,如果您只想在不使用结构的情况下分配它,您仍然可以制作#define

答案 2 :(得分:0)

我认为问题在这里

double p [params.nSamples];

尝试在那里给出一个值,尽管在大小的位置有变量