这是我写的一个小程序,(我还在写它),但是到目前为止,编译程序不应该按照我的理解给出任何错误。
#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。 在编译代码时我得到的警告是什么原因。
答案 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 */