Chinaunix

标题: 寻找变量定义的问题 [打印本页]

作者: terry8416    时间: 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)的定义呢?
作者: tyc611    时间: 2007-10-10 00:36
使用前先定义变量
作者: mafiaguy    时间: 2007-10-10 19:20
不知道你将extern放在语句块内部的目的是什么呢?
作者: cugb_cat    时间: 2007-10-10 19:23
楼主没弄明白extern是干嘛使得,还是去看看书吧
作者: whyglinux    时间: 2007-10-10 21:49
>> 为什么找不到上一级域(非top level)的定义呢?

因为 extern int a; 期望 a 是一个外部或者内部连接的全局变量,而 int a=1; 定义的是一个无连接的局部变量。
作者: flw2    时间: 2007-10-10 21:54
你的错误是连接错误,连接器看不到你的  int a=1;跟看不到int b = 22;是一样的
把int a放到函数外就是一个连接器能看到的符号了,放到函数内部的上面,就把a和LOCAL a联起来了,不会让连接器看到a未解析
作者: imdemon    时间: 2007-10-11 00:08
呃。。。。
作者: terry8416    时间: 2007-10-11 10:19
谢谢楼上的解答。我写此代码的原因是最近在做一个关于变量错误分析的程序,需要考虑各种情况。

[ 本帖最后由 terry8416 于 2007-10-11 10:29 编辑 ]
作者: evaspring    时间: 2007-10-11 11:02
原帖由 imdemon 于 2007-10-11 00:08 发表
呃。。。。


这个家伙貌似没解答什么吧,白捡了个便宜~!
作者: while(1)    时间: 2007-10-11 11:07
不懂 似乎很深奥
作者: flw2    时间: 2007-10-11 11:26
原帖由 terry8416 于 2007-10-11 10:19 发表
谢谢楼上的解答。我写此代码的原因是最近在做一个关于变量错误分析的程序,需要考虑各种情况。


你不是要直接分析代码吧
作者: terry8416    时间: 2007-10-11 15:05
是的,对输入的一段代码进行分析,找出其中变量相关的错误。
作者: cugb_cat    时间: 2007-10-11 15:11
原帖由 terry8416 于 2007-10-11 15:05 发表
是的,对输入的一段代码进行分析,找出其中变量相关的错误。

词法语法分析器?
extern在编译的时候是不会出错的,连接才出错,如果只是词法语法检查,这个应该没问题。
作者: augustusqing    时间: 2007-10-11 15:15
LZ没有搞清楚变量的声明和定义的区别,程序的编译和链接的区别

[ 本帖最后由 augustusqing 于 2007-10-11 15:19 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2