#inlude <stdio.h>
typedef struct node
{
int data, height, count;
struct node *left, *right, *father;
}node;
node *root = NULL;
void main(){
//some code here
}
上面的代码没有错误,但是
#inlude <stdio.h>
typedef struct node
{
int data, height, count;
struct node *left, *right, *father;
}node;
node *root;
root = NULL;
void main(){
//some code here
}
这会产生以下错误:
sample.c:11:1: error: conflicting types for 'root'
sample.c: 10:7 note: previous declaration of 'root' was here
node *root;
^
声明
时不会复制上述错误root = NULL;
在main function
可能是什么原因?
答案 0 :(得分:7)
在第一种情况下,
node *root = NULL;
申报时是 initialization 。在全球范围内明确允许这样做。
另一方面,
node *root;
root = NULL;
是声明和 assignment ,后者是要执行的声明,它必须在某个函数范围内。它不能驻留在全球范围内。
因此,在您的情况下,root
是一个全局变量,可以从main()
完全访问,并且赋值语句在那里也是合法的。没有抱怨。