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

时间:2013-12-02 12:34:54

标签: c gcc malloc

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

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


struct node {
    Client value;
    struct node *next;
};
typedef struct node *LinkedListNode;

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

int main(){

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

    Client aux,aux2;
    char command;
    command= getchar();
    while(command!='x'){ 
        switch(command){
                    (...)

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

结构在* .h文件中定义,以防万一。

1 个答案:

答案 0 :(得分:4)

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

例如:

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

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

    command= getchar();
    while(command!='x'){ 
        switch(command){
                    (...)
}

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

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