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

[复制链接]
 楼主| 限量_个性。 发表于 2013-3-16 23:04 | 显示全部楼层 |阅读模式
用模块化编程很方便,但是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中声明 但所有声明外部变量时都不得初始化

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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文件需要这些变量时 在他自己对应的头文件里要不要声明了?
 楼主| 限量_个性。 发表于 2013-3-17 00:13 | 显示全部楼层
或者说  c51中编译说的  变量重复定义  该怎么解决?
 楼主| 限量_个性。 发表于 2013-3-17 00:19 | 显示全部楼层
huangxz 发表于 2013-3-17 00:03
把需要共享的全部在一个.h文件中用extern 声明,然后在所有的.c文件前include进去就可以了。 ...

那变量的定义怎么办? 全部都初始化么?
huangxz 发表于 2013-3-17 00:39 | 显示全部楼层
限量_个性。 发表于 2013-3-17 00:19
那变量的定义怎么办? 全部都初始化么?

变量的原始定义还是跟原来一样,该怎么定义就怎么定义,要不要初始化完全取决于程序的需要,extern 声明时的变量是不可以初始化的
 楼主| 限量_个性。 发表于 2013-3-17 00:48 | 显示全部楼层
huangxz 发表于 2013-3-17 00:39
变量的原始定义还是跟原来一样,该怎么定义就怎么定义,要不要初始化完全取决于程序的需要,extern 声明时 ...

你的意思就是单单添加一个h文件 把要共享的变量都放进去 在需要这些变量的c文件里添加该h文件 该初始化的初始化~~~ 确定这样行么~~
refee 发表于 2013-3-17 00:49 | 显示全部楼层
限量_个性。 发表于 2013-3-17 00:09
嗯 我的意思是写一个c就要写上一个对应的h文件 而h文件里当然也可以包含c文件需要的一些h文件 我想问的是 ...

如果另一个c没有包含已声明变量的h 当然需要先声明外部变量 至于在c或者在h里面声明 完全可以根据你的习惯来 不过记得声明外部变量时不能初始化就OK了
refee 发表于 2013-3-17 00:54 | 显示全部楼层
限量_个性。 发表于 2013-3-17 00:48
你的意思就是单单添加一个h文件 把要共享的变量都放进去 在需要这些变量的c文件里添加该h文件 该初始化的 ...

当然可以 事实上变量较多时大多都是这样做的 比如俺二楼截图第六行的“global.h”就是 有时需要临时用一下其他外部变量 所以在第十四和十五行就又声明了两个外部变量
 楼主| 限量_个性。 发表于 2013-3-17 01:03 | 显示全部楼层
refee 发表于 2013-3-17 00:54
当然可以 事实上变量较多时大多都是这样做的 比如俺二楼截图第六行的“global.h”就是 有时需要临时用一 ...

好滴  我试试看去 ~~
 楼主| 限量_个性。 发表于 2013-3-17 01:18 来自手机 | 显示全部楼层
refee 发表于 2013-3-17 00:49
如果另一个c没有包含已声明变量的h 当然需要先声明外部变量 至于在c或者在h里面声明 完全可以根据你的习 ...

声明过后,要不要再在C里面定义呢?你那张图里好像只声明没定义哎。。
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吗?
refee 发表于 2013-3-17 01:35 | 显示全部楼层
只需声明即可 比如在1.c声明一个全局变量写了“int i= 0;” 如果在2.c里面需要对i进行操作 你只需在2.c里面写"extern int i;"声明即可 你因为写了“extern int i = 0;”所以编译才会出现错误 这就是俺一再提醒你的声明外部变量时不得初始化赋值
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
frlop 发表于 2013-3-17 08:05 | 显示全部楼层
限量_个性。 发表于 2013-3-17 00:48
你的意思就是单单添加一个h文件 把要共享的变量都放进去 在需要这些变量的c文件里添加该h文件 该初始化的 ...

可以的,如果你的程序不是大到一定程度,或者觉得没必要封装的非常极致的话,建议一个.h就好了,思路更清楚。所以是不是一定要一个.c配一个.h还是看程序需要或个人习惯吧。
菜鸟同学 发表于 2013-3-17 10:41 | 显示全部楼层
.h 函数和数据的原型,就是一个外表,.C文件 就是他的具体实现,我一般是这么干的,
.h 中 把要共享的变量申明出来  extern type var;
.c 中 就定义和 写函数的具体实现方法
要用的时候 直接#include "xx.h"
菜鸟是这么认为的!
tangmingming 发表于 2013-3-17 11:24 | 显示全部楼层
学习
 楼主| 限量_个性。 发表于 2013-3-17 11:46 | 显示全部楼层
菜鸟同学 发表于 2013-3-17 10:41
.h 函数和数据的原型,就是一个外表,.C文件 就是他的具体实现,我一般是这么干的,
.h 中 把要共享的变量 ...

我就这样弄了啊  可说什么  “声明外部变量错误”  啊啊啊~
ecoren 发表于 2013-3-17 13:12 | 显示全部楼层
学习。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

45

主题

1082

帖子

14

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