搜索
bottom↓
回复: 9

写程序的一点心得!哈哈

[复制链接]

出0入0汤圆

发表于 2009-6-9 21:01:59 | 显示全部楼层 |阅读模式
全局变量 && 宏定义
★★★★★★★★★★★★
在程序较大的情况下,为了方便阅读和维护。一般会将程序按一定的功能进行分块处理,每个程序块可以写到一个或多个“ .c”文件中;而每个模块要使用到的数据就是全局变量;

全局变量是从它定义的开始,就分配了内存;而且可在整个项目中的各个模块公用的;
这种情况下,就要使用到 exetern 关键字进行定义, 必须在 .C 和 .H 文件中定义。

一般如下定义:
XX.c 文件中定义一个变量:unsigned char disp_flag;  
XX.h 文件中就要这样定义:extern unsigned char disp_flag;
这样才能在各个模块中使用全局变量disp_flag;.............

这种重复的定义很容易导致错误。以下是参照 ucos_II 中的方法,只须在头文件中定义一次。就可以在项目中各个模块使用该全局变量了;
掌握这种方法后,使用非常方便,灵活。哈哈~!

★★★★★★★★★★★★
在 XX.h 文件中定义内容如下:  
        #ifdef _MAIN_C_
            #define global
        #else
            #define global extern
        #endif
/***********变量定义**********/
        global unsigned char dispbuffer[3];
                        .
                        .
                        .
        /*在这一段中定义要使用的全局变量,注意:在前面一定记得加上 global,( 也可以是你自己喜欢的
字符串,但是一定要与上面宏定义“#define global  ; #define global extern”  使用的字符串一致;本例中定义了global,那么在定义变量前就加“global”了....)

        .............
/***********变量定义**********/
        #undef global
/**************************/
        #endif







★★★★★★★★★★★★

在项目的其中一个 XX.c 文件中(一般选main.c,个人习惯而已) 定义内容如下:

#define _MAIN_C_          //   ( 注意这里定义的字符串一定要与 XX.h文件中的第一句
                                                  //        “#ifdef _MAIN_C_” 定义的字符口串一致 )
#include "XX.h"       //   包含头文件

void main()
{
     .
     .
     .
}
#endif       

★★★★★★★★★★★★

在其它的 .c 文件中, 只要在开头写:
#include "XX.h"      //   包含头文件
……
void xxx()
{
.........
}

这样写之后,所有全局变量只须在“XX.h ”文件中定义一次就可以了/。。。。哈哈,,方便吧!




本文系作者学习心得结合相关资料整理         QQ:657874307       邮箱:  viqomk@163.com

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-6-9 21:21:07 | 显示全部楼层
多谢共享!!!

出0入0汤圆

 楼主| 发表于 2009-6-9 21:29:39 | 显示全部楼层
发错了,原本想发在51单片机 版面...
哈...

出0入0汤圆

发表于 2009-6-9 21:48:14 | 显示全部楼层
谢谢

出0入4汤圆

发表于 2009-6-9 23:44:58 | 显示全部楼层
收藏了……

出0入0汤圆

发表于 2009-6-10 09:14:39 | 显示全部楼层
感觉不出LZ的方法优点何在

我一般是如下做的

//-------------------------------------
// A.h
#ifndef _H_A
#define _H_A

#include "main.h"

extern int A;
...

#endif

//-------------------------------------
// A.c
#include "A.h"

int A;
...





//-------------------------------------
// B.h
#ifndef _H_B
#define _H_B

#include "main.h"

extern int B;
...

#endif

//-------------------------------------
// B.c
#include "B.h"

int B;
......



//-------------------------------------
// main.h
#ifndef _H_MAIN
#define _H_MAIN

#include <xxxx.h>
#include "A.h"
#include "B.h"
...

#endif

//-------------------------------------
// main.c
#include "main.h"

void main(void)
{
   ...
}

====================
这样,A.c只引用A.h,B.c只引用b.h
除main.h外,其它.h文件只引用main.h

出0入0汤圆

发表于 2009-10-30 17:00:03 | 显示全部楼层
多谢

出0入0汤圆

发表于 2010-1-10 10:46:38 | 显示全部楼层
我顶lz,。好人啊

出0入0汤圆

发表于 2010-1-10 12:49:35 | 显示全部楼层
USOS的源代码就是楼主的做法

出0入0汤圆

发表于 2010-1-30 18:35:44 | 显示全部楼层
要写大程序,不得不养成好的习惯。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 21:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表