小议 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

图片内容