我正在尝试在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
我是否错误地声明了我的常量?
答案 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];
尝试在那里给出一个值,尽管在大小的位置有变量