Chinaunix首页 | 论坛 | 博客
  • 博客访问: 329332
  • 博文数量: 79
  • 博客积分: 2466
  • 博客等级: 大尉
  • 技术积分: 880
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-07 16:47
文章分类

全部博文(79)

文章存档

2014年(3)

2012年(7)

2011年(14)

2010年(2)

2009年(2)

2008年(2)

2007年(18)

2006年(31)

分类: C/C++

2011-10-28 18:40:46

定义在所有函数之外的变量。

前面加extern时,是声明,意味引用其他文件中定义的外部变量。例如
extern int g_i;
int main(int argc, char **argv) {
  printf("%d\n", g_i);
  return 0;
}

编译错误:
$ gcc main.c
/tmp/ccSB0l0D.o: In function `main':
main.c:(.text+0x8f): undefined reference to `g_i'
collect2: ld returned 1 exit status

前面不加extern,是定义,可以在本文件中定义点到文件尾直接引用。
int g_i;
int main(int argc, char **argv) {
  printf("%d\n", g_i);
  return 0;
}
编译不会有问题。

关键的区别在于有没有extern,而不在于有没有赋初始值。

另外在函数中也可以声明一个变量为外部变量:
int g_i;
int main(int argc, char **argv) {
  extern int g_i;
  printf("%d\n", g_i);
  return 0;
}
程序编译和运行都没有错,但extern int g_i;是可有可无了。
阅读(1238) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~