首页
社区
课程
招聘
[求助]驱动编译包含重复头文件导致连接错误
发表于: 2014-3-20 16:16 6549

[求助]驱动编译包含重复头文件导致连接错误

2014-3-20 16:16
6549
正如题目所示,因为需要在一个驱动工程的两个.c后缀名的文件中需要重复包含同一个.h后缀名的头文件。

头文件中无论是使用如下
#ifndef _TEST_H
#define _TEST_H
#endif
亦或者使用
#pragma once

使用build编译之时都会导致连接错误。

注:头文件中定义有全局变量。
但是如果我前面使用了仅编译一次,这些全局变量应该不会重复定义啊?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 1392
活跃值: (5177)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
extern
2014-3-20 16:44
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
全部加了extern还是不行。而且我觉得前面有#pragma once这种,编译过一次就不会再次编译为什么会出现重复定义错误。。。
2014-3-20 17:16
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
once 跟编译没有关系 的。 那玩意叫做重复包含。 意思是不会导致嵌套或重复包含。

但你的两个C文件独立 又是全局变量。就会导致两个相同名字的全局变量出来了。 链接时会出错的。
2014-3-20 18:56
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
也就是说如果两个不同的c独立文件引用同样的头文件,头文件中不能含有变量定义。是这个意思么。。。有没有别的什么解决方法之类的
2014-3-20 22:07
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
可以定义 啊。  

extern CAppModule _Module;

上面这行就 是 stdafx.h的代码。

你重新改改。 全部重新生成试试。
2014-3-20 22:12
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
意思就是全局变量前面加extern么。。。我试过好像还是连接错误
2014-3-20 22:18
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
发工程。
2014-3-20 22:26
0
雪    币: 25
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
用预编译
2014-3-21 08:51
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我好想明白了什么。。。两个C文件引用的头文件中必须加extern,但是不能直接给全局变量赋值,否则还是会被判定为定义而不是声明。。。是这么理解的么?
2014-3-21 23:00
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
。。。 不然你两个地方都给值了。 他怎么知道哪个值是正确的。
2014-3-21 23:30
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
全局变量在头文件中加extern,另外在C文件中再定义一次,头文件中就相当于前置声明
2014-3-22 01:07
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
差不多了解了,感谢回答
2014-3-24 09:28
0
游客
登录 | 注册 方可回帖
返回
//