在全局的int a;和int a=1;有什么区别?

warcao 2011-05-24 08:17:57
加精
今天在gcc下写程序时发现一个问题:
我在全局的声明

int a;
int a;

可以写无数个int a;重复声明不报错。而在函数中这么写编译器会报重复声明错误。
而只能写一个int a = 1;这是为什么?不理解。
int a;有没有给a分配内存空间?

...全文
5285 133 打赏 收藏 转发到动态 举报
写回复
用AI写文章
133 条回复
切换为时间正序
请发表友善的回复…
发表回复
a1286651722 2012-07-27
  • 打赏
  • 举报
回复
int a 是声明变量a 告诉编译器变量的类型、存储类型,不分配存储空间 而int a=1;告诉编译器在此处分配存储空间创建变量 同一变量定义只能一次,但是可以声明多次
「已注销」 2011-11-26
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 m_nikki 的回复:]

声明的时候没有分配内存,定义则会分配内存。所以说只可以有一个定义,但是可以有多个声明,对于int a;
编译器其实是视为extern int a;这属于声明,但是extern int a = 1;这也算是定义。int a = 1; 这就是一个定义。多个定义自然会有重定义错误。声明和定义不是一回事,对于声明和定义界限。楼主可以参考下c++primer 里面关于extern 的解释。希望对你有帮助……
[/Quote]

同意
zoelva 2011-11-25
  • 打赏
  • 举报
回复
变量可以重复声明多次,但只能被定义一次,声明与定义的概念请详细看C++ PRIMER
SVKING 2011-11-24
  • 打赏
  • 举报
回复
应该是优化过了,多次int a;应该会只有一个是定义其他的算声明
 #include <stdio.h>
int a;
int a;
int main (void)
{
printf ("%d\n",a);
return 0;
}//正确,输出0


可是如果有初始值就只能是定义了。
 #include <stdio.h>
int a=1;
int a;
int main (void)
{
printf ("%d\n",a);
return 0;
}//正确,输出1


#include <stdio.h>
int a;
int a=1;
int main (void)
{
printf ("%d\n",a);
return 0;
}//正确,输出1


 #include <stdio.h>
int a=1;
int a=2;
int main (void)
{
printf ("%d\n",a);
return 0;
}//错误:a重定义了

McMong 2011-08-23
  • 打赏
  • 举报
回复
学习了。。。。
li3208 2011-08-19
  • 打赏
  • 举报
回复
mark
ailurus 2011-08-18
  • 打赏
  • 举报
回复


int a
wangyinglong0204 2011-08-01
  • 打赏
  • 举报
回复
C标准规定全局变量是可以重复声明,但不可以重复定义的。int a为全局变量时只是声明,并不对其分配内存空间。只有对其初始化时才分配。
至于有的编译器在linker时无错误,我觉得可能是后来的编译器对这方面做了强制的处理,更加人性化而已。避免了重复声明时可能带来的BUG或者代码可读性的降低。
砂草年少 2011-06-28
  • 打赏
  • 举报
回复
学习了
a341869094 2011-05-31
  • 打赏
  • 举报
回复
来学习的
METEOR_T 2011-05-31
  • 打赏
  • 举报
回复
声明与定义的问题。
zgdidxgqh 2011-05-31
  • 打赏
  • 举报
回复
重定义, 是不允许的
wizard_tiger 2011-05-31
  • 打赏
  • 举报
回复
重定义错误,VC6.0中报错。
CHENLIANG83415 2011-05-30
  • 打赏
  • 举报
回复
尽量不要用一个字母老是定义很容易错的
freewings 2011-05-30
  • 打赏
  • 举报
回复
应该不会吧 这太神奇了~~~~·
披头李 2011-05-30
  • 打赏
  • 举报
回复
又学到了一点知识!呵呵,,
hayvane555 2011-05-30
  • 打赏
  • 举报
回复
多去看看书
jiambet 2011-05-30
  • 打赏
  • 举报
回复
围观学习
jiambet 2011-05-30
  • 打赏
  • 举报
回复
学习学习
zhang3317 2011-05-30
  • 打赏
  • 举报
回复
加载更多回复(105)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧