写程序的一点心得!哈哈
全局变量 && 宏定义★★★★★★★★★★★★
在程序较大的情况下,为了方便阅读和维护。一般会将程序按一定的功能进行分块处理,每个程序块可以写到一个或多个“ .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;
.
.
.
/*在这一段中定义要使用的全局变量,注意:在前面一定记得加上 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 多谢共享!!! 发错了,原本想发在51单片机 版面...
哈... 谢谢 收藏了…… 感觉不出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 多谢 我顶lz,。好人啊 USOS的源代码就是楼主的做法 要写大程序,不得不养成好的习惯。
页:
[1]