全局变量问题

[复制链接]
 楼主| langgao183 发表于 2013-5-20 12:06 | 显示全部楼层 |阅读模式
请问:我定义了一个.h和两个.C;例如:1.h   2.c   3.c  我在1.h定义全局变量 extern unsigned char  a;
我在3.c的程序中调用2.c的程序,并且在2.c中给a装值,因为我想是全局变量,就没有用return返回a,在3.c使用的时候全是 0。这问题出在哪里??
yewuyi 发表于 2013-5-20 14:49 | 显示全部楼层
请问:我定义了一个.h和两个.C;例如:1.h   2.c   3.c
我在1.h定义全局变量 extern unsigned char  a;
RE:这个不叫定义,这叫着声明,请搞清楚定义和声明的区别
我在3.c的程序中调用2.c的程序,并且在2.c中给a装值,因为我想是全局变量,就没有用return返回a,
在3.c使用的时候全是 0。这问题出在哪里??
yewuyi 发表于 2013-5-20 14:54 | 显示全部楼层
在C语言中虽然在H文件和C文件都可以定义和声明,但很容易弄混,不偏于文件管理,所以在规范的企业内部都有严格的C语言的程序的书写规范,变量的定义、声明、使用上通常的规定如下:
1、在C文件中定义变量
2、在H文件中声明变量
3、每个C文件都对应一个与自己同名的H文件
4、在每个C文件的开头使用include与自己同名的H文件。
5、例如在2.C文件定义了一个变量,想在3.C文件中使用,则应该在3.H文件使用extern声明其为外部变量,然后在3.c的开头包含3.H文件,此后就可以在3.C文件使用这个变量了。
yewuyi 发表于 2013-5-20 14:55 | 显示全部楼层
C语言的基础知识问题还是需要你自己百度或阅读相关**学习的,这些问题拿上来,说明大学都没好好学习,应该拉出去打屁股的。
 楼主| langgao183 发表于 2013-5-20 14:57 | 显示全部楼层
yewuyi 发表于 2013-5-20 14:49
请问:我定义了一个.h和两个.C;例如:1.h   2.c   3.c
我在1.h定义全局变量 extern unsigned char  a;
R ...

难道在1.h中unsigned char a;   在2.c这样extern unsigned char  a;
是不是这样才可以的????????
yewuyi 发表于 2013-5-20 15:00 | 显示全部楼层
langgao183 发表于 2013-5-20 14:57
难道在1.h中unsigned char a;   在2.c这样extern unsigned char  a;
是不是这样才可以的??????? ...

可以这样,这样可以编译通过。

但这些写基本没啥好处,如同盖房子,你非的把房子的大门朝天开,然后每天爬梯子进房屋,虽然可以,但显然是弊端多多。
1521732588 发表于 2013-5-20 15:21 | 显示全部楼层
yewuyi,太佩服了,你懂的真多
 楼主| langgao183 发表于 2013-5-20 15:28 | 显示全部楼层
yewuyi 发表于 2013-5-20 14:55
C语言的基础知识问题还是需要你自己百度或阅读相关**学习的,这些问题拿上来,说明大学都没好好学习,应 ...

丑大了!!谢谢版主。我的解决了,就是在1.h   extern unsigned char  a; 然后在2.c中 unsigned char a; 暂时先养着这习惯先
SevenWans 发表于 2013-5-21 11:08 | 显示全部楼层
我觉得在在2.c中定义并且在2.h的头文件中申明 extern 就可以了,3.c中要使用就包含2.h就可以了!不知道这样使用有弊端没?
yewuyi 发表于 2013-5-21 11:58 | 显示全部楼层
SevenWans 发表于 2013-5-21 11:08
我觉得在在2.c中定义并且在2.h的头文件中申明 extern 就可以了,3.c中要使用就包含2.h就可以了!不知道这样 ...

弊端显而易见,就是不便于**、查询、管理变量和函数的定义和声明,如果一一对应,你移植的时候,只要拷贝对应C文件和H文件即可,不需要的H文件就不拷贝。

C语言的书写要求非常自由,但这种自由往往给年轻人工程师造成的是麻烦,而不是帮助。
yewuyi 发表于 2013-5-21 12:00 | 显示全部楼层
只要能编译通过,C语言的书写没有绝对的规则,推荐规则只是鉴于多数人的使用习惯和**习惯,但如果你非常熟悉且习惯了另一种方法,则不改也无妨,但如果是大工程师,需要多人会同编程时,则需要按照同一个规则书写代码
SevenWans 发表于 2013-5-21 13:09 | 显示全部楼层
yewuyi 发表于 2013-5-21 11:58
弊端显而易见,就是不便于**、查询、管理变量和函数的定义和声明,如果一一对应,你移植的时候,只要拷 ...

虽然没怎么看懂,但是我觉得你讲得很有道理!学习了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

112

帖子

1

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

23

主题

112

帖子

1

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