这是一个结构体数组,其中的元素被声明为
它还通过在头文件中使用
我使用
现在我尝试使用我的全局结构体给另一个结构体赋值。
但是我遇到了一个错误
问题是如何在保持上述结构的情况下解决这个错误?
const
。它还通过在头文件中使用
extern
关键字作为全局变量传递。// foo.h file
typedef enum
{
A = 0,
B,
C,
NAMES_MAX,
} Names_t;
typedef struct
{
const int x;
const int y;
} Foot_t;
// my global array.
extern const Foot_t FOO[NAMES_MAX];
// foo.c file
const Foot_t FOO[NAMES_MAX] =
{
[A] = { .x = 1, .y = 1 },
[B] = { .x = 2, .y = 2 },
[C] = { .x = 3, .y = 3 },
};
我使用
Names_t
作为结构体FOO
的索引。现在我尝试使用我的全局结构体给另一个结构体赋值。
// bar.c file
typedef struct
{
const int x;
const int y;
// more members here.
} Bar_t;
static Bar_t BAR =
{
.x = FOO[A].x,
.y = FOO[A].y,
};
但是我遇到了一个错误
initializer element is not constant in C
。
我知道这个错误的意思,FOO
实际上不是一个常量表达式,就像在C++中那样。问题是如何在保持上述结构的情况下解决这个错误?
FOO
,而要在当前使用BAR
的地方呢? - undefinedint const* const
指针替换这些值,这些指针是可以初始化的(= &Foo[A].x
)。虽然对我来说,指针间接引用是否更好看还有待商榷。你也可以使用#define
来定义这两个相关的值,并用它们来初始化所有四个变量。 - undefinedstatic int x=0; static int y=x;
这样的写法是不可能的。有很多重复的问题,我懒得去找一个。 - undefinedconstexpr
存储说明符,使得可以将FOO
用作编译时常量。 - undefined