打印

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

[复制链接]
7038|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我用头文件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 | 只看该作者
一个文件定义,其它文件声明

使用特权

评论回复
5
江枫渔火| | 2013-2-22 09:42 | 只看该作者
在一个C文件里定义,在公共h文件里用exxxx声明

使用特权

评论回复
6
henryzheng| | 2013-2-22 09:57 | 只看该作者
可以参考ucos里的写法。

使用特权

评论回复
7
liuoulyy|  楼主 | 2013-2-22 20:59 | 只看该作者
谢谢大家,我先试下.

使用特权

评论回复
8
dirtwillfly| | 2013-2-22 22:32 | 只看该作者
楼主还是尽量规范点写程序吧。

使用特权

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

#endif

使用特权

评论回复
10
赤铸| | 2013-6-2 12:50 | 只看该作者
声明可以重复无数次,只要一致
定义只能一次
所以H文件通常都是声明

使用特权

评论回复
11
yaoyuanytu| | 2013-6-8 15:49 | 只看该作者
9#正解  主文件定义一次  多次声明即可

使用特权

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

本版积分规则

134

主题

472

帖子

1

粉丝