在 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 };