[英]Const variable in a global struct in C
我正在嘗試在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
我是否錯誤地聲明了我的常數?
是。 這意味着它應該使用2、3、10之類的值2, 3, 10
而不是變量n
如我所見,您的價值是不變的,因此您可以使用
#define NSAMPLES 8192
並使用像
double p[NSAMPLES];
更好的方法是,進行動態分配
double* p = malloc(sizeof(double)*params.nSamples);
在C89中,不能聲明長度可變的數組。 如果要這樣做,則必須通過malloc
或類似的函數自己分配它,然后釋放內存。
如果仍要這樣做,則可以使用C99,例如在gcc上使用標志--std=c99
進行編譯。 它將允許您聲明此類數組。
就像其他人所說的那樣,如果您只想在不使用結構的情況下進行分配,則仍然可以創建#define
。
我認為問題在這里
雙重p [params.nSamples];
嘗試在此處給出一個值,盡管該變量是可變的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.