簡體   English   中英

C中全局結構中的常量

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM