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

[复制链接]
7640|10
 楼主| liuoulyy 发表于 2013-2-21 20:53 | 显示全部楼层 |阅读模式
我用头文件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

主题

472

帖子

1

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