免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2920 | 回复: 13
打印 上一主题 下一主题

寻找变量定义的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-10 00:33 |只看该作者 |倒序浏览

  1. #include<stdio.h>

  2. int main()
  3. {
  4.         {
  5.                 extern int a;
  6.                 printf("%d\n",a);
  7.         }
  8.         int a=1;
  9. }
复制代码

如上代码,用gcc编译链接时出错:
undefined reference to `a'
没有找到a的定义
不过如果把int a=1;这句置于语句块内或是top level内则可以找到。这是怎么回事呢?为什么找不到上一级域(非top level)的定义呢?

论坛徽章:
0
2 [报告]
发表于 2007-10-10 00:36 |只看该作者
使用前先定义变量

论坛徽章:
0
3 [报告]
发表于 2007-10-10 19:20 |只看该作者
不知道你将extern放在语句块内部的目的是什么呢?

论坛徽章:
0
4 [报告]
发表于 2007-10-10 19:23 |只看该作者
楼主没弄明白extern是干嘛使得,还是去看看书吧

论坛徽章:
0
5 [报告]
发表于 2007-10-10 21:49 |只看该作者
>> 为什么找不到上一级域(非top level)的定义呢?

因为 extern int a; 期望 a 是一个外部或者内部连接的全局变量,而 int a=1; 定义的是一个无连接的局部变量。

论坛徽章:
0
6 [报告]
发表于 2007-10-10 21:54 |只看该作者
你的错误是连接错误,连接器看不到你的  int a=1;跟看不到int b = 22;是一样的
把int a放到函数外就是一个连接器能看到的符号了,放到函数内部的上面,就把a和LOCAL a联起来了,不会让连接器看到a未解析

论坛徽章:
0
7 [报告]
发表于 2007-10-11 00:08 |只看该作者
呃。。。。

论坛徽章:
0
8 [报告]
发表于 2007-10-11 10:19 |只看该作者
谢谢楼上的解答。我写此代码的原因是最近在做一个关于变量错误分析的程序,需要考虑各种情况。

[ 本帖最后由 terry8416 于 2007-10-11 10:29 编辑 ]

论坛徽章:
26
处女座
日期:2016-04-18 14:00:4515-16赛季CBA联赛之深圳
日期:2020-06-02 10:10:5015-16赛季CBA联赛之广夏
日期:2019-07-23 16:59:452016科比退役纪念章
日期:2019-06-26 16:59:1315-16赛季CBA联赛之天津
日期:2019-05-28 14:25:1915-16赛季CBA联赛之青岛
日期:2019-05-16 10:14:082016科比退役纪念章
日期:2019-01-11 14:44:062016科比退役纪念章
日期:2018-07-18 16:17:4015-16赛季CBA联赛之上海
日期:2017-08-22 18:18:5515-16赛季CBA联赛之江苏
日期:2017-08-04 17:00:4715-16赛季CBA联赛之佛山
日期:2017-02-20 18:21:1315-16赛季CBA联赛之天津
日期:2016-12-12 10:44:23
9 [报告]
发表于 2007-10-11 11:02 |只看该作者
原帖由 imdemon 于 2007-10-11 00:08 发表
呃。。。。


这个家伙貌似没解答什么吧,白捡了个便宜~!

论坛徽章:
0
10 [报告]
发表于 2007-10-11 11:07 |只看该作者
不懂 似乎很深奥
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP