全局变量在不同C文件中的调用问题

[复制链接]
6137|10
手机看帖
扫描二维码
随时随地手机跟帖
liuoulyy|  楼主 | 2013-2-21 20:53 | 显示全部楼层 |阅读模式
2013-2-21 15-45-54.png 我用头文件tgq.h声明了如下数组和一个位变量:

bit int_jsou;//CAN中断接收完成
unsigned char RXbufferh [4];   //CAN接收高4位数据
unsigned char RXbufferl [4];   //CAN接收低4位数据
unsigned char TXbufferh [4];   //CAN发送低4位数据
unsigned char TXbufferl [4];   //CAN发送高4位数据

在两个C文件中调用上面一个共用的头文件tgq.h,为何编译通过,而连接出错提示上面的报错提示。还望大侠提示下?提示像是公用符号重名,但我在声明定义中无重复啊。后来我分别把两个C文件中的位变量int_jsou全删掉,还是提示int_jsou公用符号重名。

相关帖子

liuoulyy|  楼主 | 2013-2-21 20:55 | 显示全部楼层
不知是何原因?

使用特权

评论回复
HWM| | 2013-2-21 21:00 | 显示全部楼层
头文件通常只放类型。你这样在头文件中定义变量,不同模块将重复定义。编译没问题,但连接会报错(重复定义)。

一般在一个主模块内定义全局变量,而其他模块使用extern关键字定义相同的变量即可。

使用特权

评论回复
ayb_ice| | 2013-2-22 07:49 | 显示全部楼层
一个文件定义,其它文件声明

使用特权

评论回复
江枫渔火| | 2013-2-22 09:42 | 显示全部楼层
在一个C文件里定义,在公共h文件里用exxxx声明

使用特权

评论回复
henryzheng| | 2013-2-22 09:57 | 显示全部楼层
可以参考ucos里的写法。

使用特权

评论回复
liuoulyy|  楼主 | 2013-2-22 20:59 | 显示全部楼层
谢谢大家,我先试下.

使用特权

评论回复
dirtwillfly| | 2013-2-22 22:32 | 显示全部楼层
楼主还是尽量规范点写程序吧。

使用特权

评论回复
Ketose| | 2013-2-22 23:05 | 显示全部楼层
楼主C语言不过关,这明显是一个头文件多次编译,改tgq.h成下面的形式,就不会多次编译了。
#ifndef __TGQ_H__
#define __TGQ_H__
//这儿放你要定义的变量
bit int_jsou;

#endif

使用特权

评论回复
赤铸| | 2013-6-2 12:50 | 显示全部楼层
声明可以重复无数次,只要一致
定义只能一次
所以H文件通常都是声明

使用特权

评论回复
yaoyuanytu| | 2013-6-8 15:49 | 显示全部楼层
9#正解  主文件定义一次  多次声明即可

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

469

帖子

1

粉丝