打印

如何让多个c文件共享变量???

[复制链接]
6705|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用模块化编程很方便,但是c文件往往要共同使用几个变量,我知道要用到外部变量声明 extern 但是不太会用 网上也有这方面的资料 但是看的不是太懂 http://blog.sina.com.cn/s/blog_803e9e9d01014nfr.html
每个c文件不都是对应一个头文件的么(除了主函数)  要是在一个头文件里声明了外部变量 其他要调用此变量的c文件的头文件里要不要声明了呢 然后自己的c文件里再加上不用初始化的变量么? 不管我声不声明编译都显示 “引用外部变量错误” ~~好头大,请了解的朋友给解决下  !!!!谢谢啊啊啊啊~~~

相关帖子

沙发
refee| | 2013-3-16 23:59 | 只看该作者
1 一个c并非只能包含一个h 而是根据情况完全可以包含很多个h
2 h里面已经声明的变量和外部变量 在包含这个h的所有c里都可直接引用
2 c需要的外部变量也可以在c中声明 但所有声明外部变量时都不得初始化

20130316234951468.jpg (189.28 KB )

20130316234951468.jpg

使用特权

评论回复
板凳
huangxz| | 2013-3-17 00:03 | 只看该作者
把需要共享的全部在一个.h文件中用extern 声明,然后在所有的.c文件前include进去就可以了。

使用特权

评论回复
地板
限量_个性。|  楼主 | 2013-3-17 00:09 | 只看该作者
refee 发表于 2013-3-16 23:59
1 一个c并非只能包含一个h 而是根据情况完全可以包含很多个h
2 h里面已经声明的变量和外部变量 在包含这个h ...

嗯 我的意思是写一个c就要写上一个对应的h文件 而h文件里当然也可以包含c文件需要的一些h文件 我想问的是在一个h里声明的变量  然后另一个c文件需要这些变量时 在他自己对应的头文件里要不要声明了?

使用特权

评论回复
5
限量_个性。|  楼主 | 2013-3-17 00:13 | 只看该作者
或者说  c51中编译说的  变量重复定义  该怎么解决?

使用特权

评论回复
6
限量_个性。|  楼主 | 2013-3-17 00:19 | 只看该作者
huangxz 发表于 2013-3-17 00:03
把需要共享的全部在一个.h文件中用extern 声明,然后在所有的.c文件前include进去就可以了。 ...

那变量的定义怎么办? 全部都初始化么?

使用特权

评论回复
7
huangxz| | 2013-3-17 00:39 | 只看该作者
限量_个性。 发表于 2013-3-17 00:19
那变量的定义怎么办? 全部都初始化么?

变量的原始定义还是跟原来一样,该怎么定义就怎么定义,要不要初始化完全取决于程序的需要,extern 声明时的变量是不可以初始化的

使用特权

评论回复
8
限量_个性。|  楼主 | 2013-3-17 00:48 | 只看该作者
huangxz 发表于 2013-3-17 00:39
变量的原始定义还是跟原来一样,该怎么定义就怎么定义,要不要初始化完全取决于程序的需要,extern 声明时 ...

你的意思就是单单添加一个h文件 把要共享的变量都放进去 在需要这些变量的c文件里添加该h文件 该初始化的初始化~~~ 确定这样行么~~

使用特权

评论回复
9
refee| | 2013-3-17 00:49 | 只看该作者
限量_个性。 发表于 2013-3-17 00:09
嗯 我的意思是写一个c就要写上一个对应的h文件 而h文件里当然也可以包含c文件需要的一些h文件 我想问的是 ...

如果另一个c没有包含已声明变量的h 当然需要先声明外部变量 至于在c或者在h里面声明 完全可以根据你的习惯来 不过记得声明外部变量时不能初始化就OK了

使用特权

评论回复
10
refee| | 2013-3-17 00:54 | 只看该作者
限量_个性。 发表于 2013-3-17 00:48
你的意思就是单单添加一个h文件 把要共享的变量都放进去 在需要这些变量的c文件里添加该h文件 该初始化的 ...

当然可以 事实上变量较多时大多都是这样做的 比如俺二楼截图第六行的“global.h”就是 有时需要临时用一下其他外部变量 所以在第十四和十五行就又声明了两个外部变量

使用特权

评论回复
11
限量_个性。|  楼主 | 2013-3-17 01:03 | 只看该作者
refee 发表于 2013-3-17 00:54
当然可以 事实上变量较多时大多都是这样做的 比如俺二楼截图第六行的“global.h”就是 有时需要临时用一 ...

好滴  我试试看去 ~~

使用特权

评论回复
12
限量_个性。|  楼主 | 2013-3-17 01:18 | 只看该作者
refee 发表于 2013-3-17 00:49
如果另一个c没有包含已声明变量的h 当然需要先声明外部变量 至于在c或者在h里面声明 完全可以根据你的习 ...

声明过后,要不要再在C里面定义呢?你那张图里好像只声明没定义哎。。

使用特权

评论回复
13
liubin1109| | 2013-3-17 01:22 | 只看该作者
学习模块化编程,受教了!
想问下“初始化”是什么意思?
还有:如果我a.c和b.c文件里面包含了<j.h>,且<j.h>里面声明变量x,执行到a.c的时候让x=1;当执行到b.c的时候x是=1吗?
如果我b.h里面不包含<j.h>,是不是要extern x?如果是的话,当执行到b.c的时候x=1吗?

使用特权

评论回复
14
refee| | 2013-3-17 01:35 | 只看该作者
只需声明即可 比如在1.c声明一个全局变量写了“int i= 0;” 如果在2.c里面需要对i进行操作 你只需在2.c里面写"extern int i;"声明即可 你因为写了“extern int i = 0;”所以编译才会出现错误 这就是俺一再提醒你的声明外部变量时不得初始化赋值

使用特权

评论回复
15
refee| | 2013-3-17 01:52 | 只看该作者
liubin1109 发表于 2013-3-17 01:22
学习模块化编程,受教了!
想问下“初始化”是什么意思?
还有:如果我a.c和b.c文件里面包含了,且里面声明 ...

1 如果b.c已经包含了j.h 就不用再写"extern x" 也不用在b.h里面包含j.h 就可以用x这个变量了
2 在b.c没有对x进行操作前当然x还是等于1

使用特权

评论回复
16
frlop| | 2013-3-17 08:05 | 只看该作者
限量_个性。 发表于 2013-3-17 00:48
你的意思就是单单添加一个h文件 把要共享的变量都放进去 在需要这些变量的c文件里添加该h文件 该初始化的 ...

可以的,如果你的程序不是大到一定程度,或者觉得没必要封装的非常极致的话,建议一个.h就好了,思路更清楚。所以是不是一定要一个.c配一个.h还是看程序需要或个人习惯吧。

使用特权

评论回复
17
菜鸟同学| | 2013-3-17 10:41 | 只看该作者
.h 函数和数据的原型,就是一个外表,.C文件 就是他的具体实现,我一般是这么干的,
.h 中 把要共享的变量申明出来  extern type var;
.c 中 就定义和 写函数的具体实现方法
要用的时候 直接#include "xx.h"
菜鸟是这么认为的!

使用特权

评论回复
18
tangmingming| | 2013-3-17 11:24 | 只看该作者
学习

使用特权

评论回复
19
限量_个性。|  楼主 | 2013-3-17 11:46 | 只看该作者
菜鸟同学 发表于 2013-3-17 10:41
.h 函数和数据的原型,就是一个外表,.C文件 就是他的具体实现,我一般是这么干的,
.h 中 把要共享的变量 ...

我就这样弄了啊  可说什么  “声明外部变量错误”  啊啊啊~

使用特权

评论回复
20
ecoren| | 2013-3-17 13:12 | 只看该作者
学习。。。

使用特权

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

本版积分规则

个人签名:欢迎进入电动车版块

45

主题

1082

帖子

14

粉丝