如何在KEIL中编写模块化的C程序
keil中自己编写C语言头文件 技术相关 2010-03-11 20:57:05 阅读626 评论0 字号:大中小 订阅 一直希望自己编写一个C语言头文件,把自己常用的一些函数放进去。上网看了很多文章,我所看到文章做法和一般C语言头文件写法基本一样,自己学着试了一下,老是不成功。后来去图书馆查书,才知道原来keil的C语言比较特别,引用同一工程其他文件中的函数需要在声明函数前加extern。 以下是一个例子: //步骤一:建立fc.h #ifndef FC_H //步骤二:建立fc.c #include "fc.h" 步骤三:将f.h和f.c放在工程的文件夹里,并在keil中将f.c添加到工程中(右键左边的Source Group n,选择Add file to groupSource group n),要用到f()函数的话就include“fC.h”就行了,例如: #include 结果大功告成,成功编译,但是并没有想象中那么实用,例如fc.c中如果定义了函数但没有被引用的话,keil会发出警告,虽然可以编译,但是一大堆警告很烦人,也和容易让人忽视其他很重要警告。我想自己编写头文件主要是适用于大型工程吧。很多人编写各自不同的函数,然后通过头文件的引用把函数给主程序或者其他子程序引用。 注:fc.h也可以放在keil/C51/INC下,引用时变为#include 最近在学模块化编程。要自己写头文件。看了一下别人的头文件,无非就两种。 第二个比第一个稍微好点。 第二个的修改:C文件中定义函数和变量及函数的具体代码,在H文件做变量和函数的声明以及其他的宏定义,不应该涉及具体的代码实现和函数定义等。 C51编程:头文件条件编译 程序移植到另外一个CPU上,其中头文件要更改。如想做一个兼容的,可用条件编译来控制头文件的编译。 假如有两个头文件my1.h和my2.h,在CPU1上编译my1.h,在CPU2上编译my2.h,则: #define CPU1 // 在使用CPU1时打开该定义,反之关闭该定义;该定义放在公共入口头文件的顶头 #ifdefine CPU1 #include "my1.h" #else #include "my2.h" #endif 如还有更多文件呢,如system.h,hard.h,这些在两个系统中都要有的,则有区别的就放在这里面,相同的就放在外面 #ifdef CPU1 #include "my1.h" #include "system1.h" #include "hard1.h" #else #include "my2.h" #include "system2.h" 也可以是system1.h #include "hard2.h" #endif #include "Public1.h" ... 也可以在各个头文件中把有差异的地方用 #ifdef CPU1 #else #endif 来区分开来 不仅仅是头文件,其他输出设备以及电路板的不同版本都可采用条件编译 KEIL模块化C程 相关文章:
#define FC_H
#include
extern void f(void)
#endif
#include
//还需要什么头文件自己添加
void f(void)
{
//要什么程序自己添加
}
#include "fc.h"
void main()
{
f();
while(1);
}
一种是只有一个.h文件,把函数的定义及函数的具体实现都放在一个.h文件中。
另外一种是一个.c文件,一个.h文件。.c是函数的具体实现,而.h只是定义函数。
这两种谁优谁劣?