小议 C中定义和声明
来源:岁月联盟
时间:2012-01-03
写给学弟的,其他飞过.:
1.int i;
2.int i = 0;
3. extern int i;
第一种,你可以认为它是定义也可以认为它是声明, 这是不同编译器决定的, 但是大部分都是声明, 只有当给i进行赋值时才会真正定义.认为它是声明.会告诉编译器我这个符号已经预定了, 在这块作用域内不允许第二个符号 .
第二种,自然是定义了,i会告诉编译器,我已经绑定到这块内存上了,其它变量不能占用这块内存,除非出栈后,一个变量或对象在一定的区域内只能被定义一次,所以如果你重复定义一个变量, 会给你error,告诉你重复定义了!
{
int i = 0;
int i = 1;
}
w1.c: In function ‘main’:
w1.c:6:13: error: redefinition of ‘i’
w1.c:5:13: note: previous definition of ‘i’ was here
第三种,任何编译器都会认为它是声明!
可以简化成: 定义创建了名字, 并且在这个作用域保持唯一, 并且为这个名字开辟内存, 声明没有分配内存 只是告诉你有这个符号了. 下面可能会用到, 不然会告诉你未声明 .
摘自 Crazybaby's blog