设为首页 加入收藏

TOP

C语言头文件组织(一)
2014-11-23 19:26:39 来源: 作者: 【 】 浏览:39
Tags:语言 文件 组织

一、全局变量单独编写(很值得借鉴)。
一般习惯将不同功能模块放到一个头文件和一个C文件中。


C语言梳理一下,分布在以下10个章节中:


例如是写一些数学计算函数:


//mymath.h
#ifndef _mymath_H
#define _mymath_H
extern int Global_A; //声明必要的全局变量
......
extern void fun(); //声明必要的外部函数
.....
#endif


//mymath.h
#ifndef _mymath_H
#define _mymath_H
extern int Global_A; //声明必要的全局变量
......
extern void fun(); //声明必要的外部函数
.....
#endif


//mymath.c
#include "mymath.h "
#include <一些需要使用的C库文件>

int Global_A; //定义必要的全局变量和函数
void fun();

int a,b,c; //定义一些内部使用的全局变量
void somefun();

//函数实现体
void fun()
{

}
void somefun()
{

}


//mymath.c
#include "mymath.h "
#include <一些需要使用的C库文件>

int Global_A; //定义必要的全局变量和函数
void fun();

int a,b,c; //定义一些内部使用的全局变量
void somefun();


//函数实现体
void fun()
{

}
void somefun()
{

}哪个C文件需要使用只需包含头文件mymath.h就可以了。


但是我认为上面的方法虽然好,但是上面定义全局变量的方式在比较大的工程中引起不便,一个模块与其他模块的数据传递最好通过专有的函数进行,而不要直接通过数据单元直接传递(这是VC++的思想),因此不建议在模块的头文件中声明全局变量;全局变量最好统一定义在一个固定的文件中,所以可以采用下面的方法:


定义一个Globel_Var.C文件来放全局变量,然后在与之相对应的Globel_Var.H文件中来声明全局变量
例如:
——————————————————————————————————


//Globel_Var.c
/*******定义本工程中所用到的全局变量*******/
int speed;
int torque;



//Globel_Var.c
/*******定义本工程中所用到的全局变量*******/
int speed;
int torque;



——————————————————————————————————


//Globel_Var.H
/*******声明本工程中所用到的全局变量*******/
extern int speed;
extern int torque;


//Globel_Var.H
/*******声明本工程中所用到的全局变量*******/
extern int speed;
extern int torque;


——————————————————————————————————
这样哪个文件用到这两个变量就可以在该文件的开头处写上文件包含命令;例如aa.C文件要用到speed,toque两个变量,可以在aa.H文件中包含Globel_Var.H文件。
——————————————————————————————————


//aa.H文件
#include “Globel_Var.H”

extern void fun(); //声明必要的接口函数


//aa.H文件
#include “Globel_Var.H”

extern void fun(); //声明必要的接口函数

//aa.c文件
#include “aa.H”//每个程序文件中包含自己的同名头件
int a,b,c; //定义一些本文件内部使用的局部变量
void somefun();

//函数实现体
void fun()
{
int d,e,f; //定义一些本函数内部使用的局部变量

}
void somefun()
{

}


//aa.c文件
#include “aa.H”//每个程序文件中包含自己的同名头件
int a,b,c; //定义一些本文件内部使用的局部变量
void somefun();


//函数实现体
void fun()
{
int d,e,f; //定义一些本函数内部使用的局部变量

}
void somefun()
{

}


——————————————————————————————————
在bb.c文件中用到aa.c文件中的函数void fun()或变量的文件可以这样写


//bb.H文件
#include “aa.H”

extern int fun_1(void);//声明本文件的接口函数


//bb.H文件
#include “aa.H”

extern int fun_1(void);//声明本文件的接口函数

//bb.c文件
#include “bb.H”

int fun_1(void)
{

fun();//调用aa.C文件中的fun()函数

}


//bb.c文件
#include “bb.H”

int fun_1(void)
{

fun();//调用aa.C文件中的fun()函数

}


——————————————————————————————————
在主函数中可以这样写:主文件main没有自己的头文件


//main.c文件
#include<系统库文件>
#include “Globle_Var.H”
#include “aa.H”
#include “bb.H”


char fun_2();//声明主文件所定义的函数
int i,j; //定义一些本模块内部使用的局部变量
char k;

void main()
{

fun();

i = fun_1();

k = fun_2();

}

char fun_2()
{

}


//main.c文件
#include<系统库文件>
#include “Globle_Var.H”
#include “aa.H”
#include “bb.H”


char fun_2();//声明主文件所定义的函数
int i,j; //定义一些本模块内部使用的局部变量
char k;

void main()
{

fun();

i = fun_1();

k = fun_2();

}


char fun_2()
{

}


——————————————————————————————————
这样即不会报错又可以轻松使用全局变量。


二、如果在全局变量前加入static或者const(隐式为static类型的变量)
如下


// xxxx.h
...
const double PI = 3.1415926;
static void* NULL = 0;
...
//


// xxxx.h
...
const double PI = 3.1415926;
static void* NULL = 0;
...
//这个头文件是可以包含在多个编译单元的。


三、头文件编写参考以下基本的规则
理想的情况下,一个可执行的模块提供一个公开的接口,即使用一个*.h文件暴露接口,但是,有时候,一个模块需要提供不止一个接口,这时,就要为每个定义的接口提供一个公开的接口。在C语言的里,每个C文件是一个模块,头文件为使用这个模块的

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python 设计模式之 单例模式 下一篇Python设计模式 之 简单工厂模式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: