本帖最后由 xwj 于 2010-4-5 00:03 编辑
这个问题,说说老x的做法:#ifndef __OSD_MAIN_H__
#define __OSD_MAIN_H__
#ifndef __OSD_MAIN_C__
// XWJ_OSD 公用函数
/********************************************************/
extern void OSD_Init(void); // OSD_ 初始化
extern void OSD_Cls(void); // 清屏
....
extern unsigned char xdata *SramAdr;
#else
// XWJ_OSD 公用函数
/********************************************************/
void OSD_Init(void); // OSD_ 初始化
void OSD_Cls(void); // 清屏
....
unsigned char xdata *SramAdr;
#endif
#endif
解释说明如下:
1、每个文件都有对应该文件名的标识定义:——这是为了避免多次重复包含这个头文件时出错,有了它就不管怎么重复引用这个头文件都没问题了。
#ifndef __OSD_MAIN_H__
#define __OSD_MAIN_H__
....
#endif
2、然后判断对应C文件的标识,没有定义__OSD_MAIN_C__的话则是外部引用,否则为真正的本地引用和变量声明——这样的话,在osd_main.c文件中先#define __OSD_MAIN_C__,然后再#include "osd_main.h",就可以确保只有唯一的一处会分配变量了,而别的程序中不定义#define __OSD_MAIN_C__,而只有#include "osd_main.h",所以执行的全都是#ifndef __OSD_MAIN_C__ ~ #else 之间的外部引用#ifndef __OSD_MAIN_C__
extern void OSD_Init(void); // OSD_ 初
extern unsigned char xdata *SramAdr;
....
#else
void OSD_Init(void); // OSD_ 初
unsigned char xdata *SramAdr;
#endif
注意:
在osd_main.c文件中这样写:
#define __OSD_MAIN_C__
#include "osd_main.h"
程序实体....
而在别的文件中却是这样写:
#include "osd_main.h"
程序实体....
修改:整理下格式 |