在 C 中运行前定义结构成员
defining struct members prior to runtime in C
我有一个问题,为什么我们不能在运行时之前在 C 中定义结构的成员。我有以下结构设置并准备就绪:
struct GSM{
char* status;
char* make;
char* accept;
char* connect;
char* exit;
};
struct GSM GSM_comms = NULL;
现在我知道我不能在 main() 之外定义这个结构的成员。但是我真的很想知道为什么。
是不是因为struct需要在栈上分配,指向堆上的变量数据?
编辑:
例如,我不能这样做:
struct GSM{
char* status;
char* outbound;
char* inbound;
char* exit;
};
struct GSM GSM_comms;
GSM_comms.status = &variable;
int main(){
}
您用来初始化结构的语法无效。您正在尝试将 NULL
,这是一个指针,分配给您的结构的一个实例(不是指针)。
要初始化 struct
,您需要为花括号括起的结构中的每个值提供值:
struct GSM GSM_comms = { NULL, NULL, NULL, NULL, NULL };
编辑:
您可以在函数之外执行此操作的原因:
GSM_comms.status = &variable;
是因为这是赋值,不是初始化。只有定义(带有可选的初始值设定项)可以出现在函数外部。您需要这样做:
struct GSM GSM_comms = { &variable, NULL, NULL, NULL, NULL };
我有一个问题,为什么我们不能在运行时之前在 C 中定义结构的成员。我有以下结构设置并准备就绪:
struct GSM{
char* status;
char* make;
char* accept;
char* connect;
char* exit;
};
struct GSM GSM_comms = NULL;
现在我知道我不能在 main() 之外定义这个结构的成员。但是我真的很想知道为什么。
是不是因为struct需要在栈上分配,指向堆上的变量数据?
编辑:
例如,我不能这样做:
struct GSM{
char* status;
char* outbound;
char* inbound;
char* exit;
};
struct GSM GSM_comms;
GSM_comms.status = &variable;
int main(){
}
您用来初始化结构的语法无效。您正在尝试将 NULL
,这是一个指针,分配给您的结构的一个实例(不是指针)。
要初始化 struct
,您需要为花括号括起的结构中的每个值提供值:
struct GSM GSM_comms = { NULL, NULL, NULL, NULL, NULL };
编辑:
您可以在函数之外执行此操作的原因:
GSM_comms.status = &variable;
是因为这是赋值,不是初始化。只有定义(带有可选的初始值设定项)可以出现在函数外部。您需要这样做:
struct GSM GSM_comms = { &variable, NULL, NULL, NULL, NULL };