Malloc/“ISO C90 禁止混合声明和代码”

Moo*_*igo 1 c malloc gcc

我使用链接列表来存储有关客户的数据:

typedef struct{
    char* name;
    unsigned long number;
    char package;
}Client;


struct node {
    Client value;
    struct node *next;
};
typedef struct node *LinkedListNode;
Run Code Online (Sandbox Code Playgroud)

当我在主函数中声明列表头时,编译器现在会抱怨混合声明和代码:

int main(){

    LinkedListNode head;
    head = (LinkedListNode) malloc(sizeof(struct node));

    Client aux,aux2;
    char command;
    command= getchar();
    while(command!='x'){ 
        switch(command){
                    (...)
Run Code Online (Sandbox Code Playgroud)

我可以看到问题是什么,因为我只是在添加“malloc”调用后才收到此错误。我只是不知道如何修复它

如果重要的话,这些结构在 *.h 文件中定义。

Dav*_*nan 5

要修复它,您必须将所有变量声明移至它们出现的块的顶部。变量的声明必须全部出现在第一个非声明代码之前。

例如:

int main(void)
{
    LinkedListNode head;
    Client aux,aux2;
    char command;

    head = (LinkedListNode) malloc(sizeof(struct node));

    command= getchar();
    while(command!='x'){ 
        switch(command){
                    (...)
}
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以在函数内部使用大括号引入一个新块,并在该块的顶部声明变量。然而,这可能会导致相当人为且混乱的代码。

此特定规则在 C99 中发生了更改。您的代码在 C99 下有效。