初始化while循环中的错误

时间:2012-04-25 11:53:09

标签: c

这是我写的一个小程序,(我还在写它),但是到目前为止,编译程序不应该按照我的理解给出任何错误。

#include <stdio.h>
#include <stdlib.h>
struct node t1 {
        int data;
        struct node *next, *prev;
};
struct node *root;
root = NULL;
int main()
{
        int i, j, choice, count;
        printf("enter choice\n");
        scanf("%d", &choice);
        count = 0;
        while (choice == 1) {
                printf("enter a data element");
                scanf("%d", &j);
                count++;
        }

}

void push()
{
}

void pop()
{
}

我得到的错误是

 cc linklist.c
linklist.c:3:16: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
linklist.c:8:1: warning: data definition has no type or storage class [enabled by default]
linklist.c:8:1: error: conflicting types for ‘root’
linklist.c:7:14: note: previous declaration of ‘root’ was here
linklist.c:8:8: warning: initialization makes integer from pointer without a cast [enabled by default]

我使用gcc和Ubuntu 11.04。 在编译代码时我得到的警告是什么原因。

4 个答案:

答案 0 :(得分:4)

struct node *root;
root = NULL;

您不能在函数外部分配。删除root = NULL,因为它隐含了具有静态存储的对象(例如全局变量)。

修改

Tom Dignan发现结构声明也是错误的:

struct node t1 { ... };
            ^^

答案 1 :(得分:2)

您不能将root = NULL;之类的语句放在顶层(任何函数之外)。做

struct node *root = NULL;

= NULL部分实际上是可选的;全局或static指针自动为空。)

答案 2 :(得分:2)

首先,你有一个在main或函数之外的赋值语句。

root = NULL;

我没有尝试过其他任何事情。

答案 3 :(得分:2)

struct node t1 {
        int data;
        struct node *next, *prev;
};

您想为struct node创建别名。它应该是:

typedef struct node  { /* typedef! */
        int data;
        struct node *next, *prev;
}t1; /* alternative name go here */