extern声明变量时遇到的问题?

[复制链接]
2096|16
 楼主| wll_2012 发表于 2013-6-24 15:41 | 显示全部楼层 |阅读模式
TE, ADC, dc, AD, COM
本帖最后由 wll_2012 于 2013-6-24 16:14 编辑

4个文件:
main.c 、adc.c、adc.h、common.h
在adc.h中声明全局变量extern u8 k;
common.h中包含adc.h,adc.c和main.c中分别包含common.h,
这样操作之后全局变量k可以再adc.c和main.c中同时调用,编译时也不会出错,我觉得这样写是会出错的,为什么编译通过了呢?
板砖横飞 发表于 2013-6-24 16:38 | 显示全部楼层
注意使用头文件的条件编译,要不然还是重复定义的。
#ifndef _HEADERNAME_H
#define _HEADERNAME_H
...
#endif
 楼主| wll_2012 发表于 2013-6-24 17:01 | 显示全部楼层
板砖横飞 发表于 2013-6-24 16:38
注意使用头文件的条件编译,要不然还是重复定义的。
#ifndef _HEADERNAME_H
#define _HEADERNAME_H

什么意思呢?
原野之狼 发表于 2013-6-24 17:06 | 显示全部楼层
你觉得为什么会编译不过呢
 楼主| wll_2012 发表于 2013-6-25 08:48 | 显示全部楼层
原野之狼 发表于 2013-6-24 17:06
你觉得为什么会编译不过呢

因为k只是声明了,却没有定义
logokfu 发表于 2013-6-25 09:05 来自手机 | 显示全部楼层
wll_2012 发表于 2013-6-25 08:48  因为k只是声明了,却没有定义

无所谓,到时候即使你引用那个变量的也是空值。如果是函数的话就是没有功能的函数了。
21ID 发表于 2013-6-25 09:07 | 显示全部楼层
wll_2012 发表于 2013-6-25 08:48
因为k只是声明了,却没有定义

很有这个可能!
原野之狼 发表于 2013-6-25 09:24 | 显示全部楼层
wll_2012 发表于 2013-6-25 08:48
因为k只是声明了,却没有定义

你的代码中没有引用它吧?
如果有引用的话,不报错才叫见鬼了。
 楼主| wll_2012 发表于 2013-6-25 10:30 | 显示全部楼层
原野之狼 发表于 2013-6-25 09:24
你的代码中没有引用它吧?
如果有引用的话,不报错才叫见鬼了。

难道我见鬼了!!?
原野之狼 发表于 2013-6-25 10:36 | 显示全部楼层
把符号表发出来看看
HORSE7812 发表于 2013-6-25 14:06 | 显示全部楼层
 楼主| wll_2012 发表于 2013-6-25 14:11 | 显示全部楼层
HORSE7812 发表于 2013-6-25 14:06
扯蛋

:L
Wayner 发表于 2013-6-25 14:14 | 显示全部楼层
“声明全局变量extern u8 k;”
既然是声明全局变量,不需要加extern的
 楼主| wll_2012 发表于 2013-6-25 14:16 | 显示全部楼层
Wayner 发表于 2013-6-25 14:14
“声明全局变量extern u8 k;”
既然是声明全局变量,不需要加extern的

不加不是定义的吗?
liusensen 发表于 2013-6-25 15:35 | 显示全部楼层
wll_2012 发表于 2013-6-25 08:48
因为k只是声明了,却没有定义

:victory:
zhaofy521 发表于 2013-6-25 17:13 | 显示全部楼层
extern 是为了混编译器的,编译器不拿它当错误来处理;
要是程序中使用过,应该连接器会报错吧
qingqiu647 发表于 2013-6-25 17:16 | 显示全部楼层
只是声明,并没有定义
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

96

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部