如何将多个C语言模块组合成一个程序

2016-01-19 17:40:52编辑:什么鱼 关键字:C语言模块  静态函数  外部函数
C语言的基本组成单元是函数,各个函数之间可以相互引用。在学到静态函数有时又将为内部函数和外部函数,即分别用static和extern说明的函数时,有不少人感到很迷惑:“外部”和“内部”到底是怎么一回事呢?
    一般来说,我们编制的C语言源程序都是放在一个扩展名为.C的文件中,这对一个较简单的程序是合适的,但对于大型项目就不合适了,其一,大项目往往由多人合作完成,大家都来操作同一个文件极易出错;其二,大文件的编译、调试都极为复杂;其三,如果两个程序中都要用到同一个自定义的函数,此函数须从一文件移动到另一文件中,这种移动容易出错。为了解决这一矛盾,一个大的程序往往被分成几个部分,存放在不同的DOS文件各。各个部分可以分开编辑、编译,最后再把这几部分链接成一个完整的程序。
    把一程序分成几部分是有一定规则的。一个函数就不能分开在两个文件中,也不能在两个文件中都对其定义一次,因此每个文件都是由完整的对函数式变量的定义式说明组成的。对于某一文件中的函数,它可以直接引用本文件中所定义的函数和外部变量。如果要想引用别的文件中定义的函数或变量,则应在引用之前用 extern,对此变量或函数进行说明。如果一个函数或外部变量在定义时前面加有static说明,那么就只有本文件内的函数能够使用它。习惯上,在每个文件的最前面放上不在此文件中的函数及变量的说明,由于对函数和变量的说明可以多次重复进行,往往建立一个头文件,在其中放入所有外部变量和外部函数的说明并在每个说明前面加上extern,然后每个源文件的第一行都用include包含这个头文件。
    对于每一个完整的源文件,都应该能够单独通过编译,以便迅速改正其中的编辑错误。Turbo c中,如果你选择了编译命令,它就编译当前编辑窗口中的文件。对于被调用函数,可以编出简单的调用函数对其可靠性进行测试,看它能不能完成预期的功能。
    在每一个文件都编好并且都通过了编译之后,你需要建立一个项目文件,把所有的文件组合在一起进行链接。如果你使用的是Borland c++ 2.0以上的版本或MS C的高版本的话,可以看到其主菜单上有一个Project(项目)菜单,其中一项为建立Project文件,选此命令,输入项目文件名后即可直接从列出的目录中选定组成项目的文件。但在Turbo C 2.0中,这个过程要复杂一些,下面我们来看一个例子。
    假设有一个程序,其中包含有main(),fun1(),fun2()三个函数及一个公用的外部变量int a:我们把main()及a的定义放在文件F1.C中,而将fun1(),及fun2()的定义放在文件F2.C中,即
    F1.C
    extern void fun1(int x);
    extern void fun2(char c);
    int a;
    main()
    { fun1(5);
    } fun2('A')
    F2.C
    extern int a;
    void fun1(int x);
    {…
    a=a+x
   
    }
    void fun2(char c)
    {…
    }
    先应把F1.C和F2.C分别输入计算机并编译后存盘。然后选File菜单下NEW命令,建立一个新的文件,即项目文件,不妨取名为MY.PRJ,其中只有两行:
    F1.C
    F2.C
    必要时,还应在文件名前加上盘符和路径,存盘。然后打开Project菜单,选Project name.输入名字MY.PRT。这时Turbo.C就知道当前要链接,运行的是一个由两个文件组的程序。选择RUN菜单下的RUN命令即可对两个文件进行编译、链接和运行的一体化操作。F4,F7,F8及断点设置等功能也可用于程序的调试中。

关键字:C语言模块  静态函数  外部函数

来源: eefocus 引用地址:http://www.eeworld.com.cn/mcu/article_24620.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机驱动继电器方式
下一篇:单片机学习之PROTUES

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

单片机C语言模块化编程方法

static void delay (uint us),这个函数冠以static修饰,一方面是限定了函数的作用范围只是在本模块中起作用,另一方面也给人传达这样的信息:该函数不会被其他模块调用。下面详细说一下这个关键字的作用,在C 语言中,关键字static 有三个明显的作用:1.在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2.在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3.在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。前两个都比较容易理解,最后一个作用就是刚刚举例
发表于 2017-11-20 19:58:04
单片机C语言模块化编程方法

单片机C语言模块化设计

keil中实现C语言模块化编程.doc 在使用 KEIL 的时候,我们习惯上在一个.c 的文件中把自己要写的东西按照 自己思路的顺序进行顺序书写。这样是很普遍的写法,当程序比较短的时候比如 几十行或者一百多行,是没有什么问题的。但是当程序很长的时候,比如你要用 到 LCD 显示数据,就有几个 LCD 相关的函数,然后你想在 LCD 上显示温度,那么 就要有 DS18B20 相关的操作,这又有几个相关的函数,  如果你还想加上去 DS1302 的时间显示功能,那么又要多很多函数。这样的话一个程序下来几百行是很正常 的事情,对于自己写的程序可能在自己的脑海中比较清晰,不会太乱,但是当把 自己写的程序交给别人
发表于 2016-05-11 09:42:51

浅谈单片机c语言模块化编程-附ds1302时钟芯片驱动程序

在单片机c语言编程中,模块化编程显得非常重要。我觉得,模块化恰恰体现了c语言很好的可移植性。嵌入式编程中,硬件模块区分非常明显,所以驱动程序用模块化编程显得十分方便简洁。 报错原因,修改了不能修改的变量。           C51中为了节省ram资源,数组用code定义在rom中,这样定义数组就不能重新赋值。     自己对着例程一条一条的看。真心表示没有发现错误。最后把函数一个一个替换成例程中的。最终确定在ds1302_write_byte中。发现了一个很奇特的事情。错误是因为fou循环
发表于 2016-05-11 09:41:12

初步认识51单片机-2.4单片机C语言模块化编程

2.2单片机C语言模块化编程 这里插入一节,讲讲单片机C语言的模块化编程。什么叫做模块化编程。前面我们写的代码全部在led.c文件中,试想一下,如果代码过多,怎么阅读。另外与你合作的人如何看懂你的代码。简单的讲,没有可读性和移植性。模块化编程就是为了解决这个问题。当一个工程量比较大时,我们会把这个工程分成一段一段的任务,每个人完成不同段的任务。同时每个段之间是有联系的。假设开发人员A需要条用B的某个功能模块,那么A只要关注模块的功能和如何调用就行了,至于这个功能是如何实现的,可以不用理会。另外,对于单个人员开发完某个工程,下一个工程可能需要同样的功能模块,同样只需要知道如何调用该模块就可以了,无需再去研究该段代码实现功能的过程
发表于 2016-03-29 15:06:02
初步认识51单片机-2.4单片机C语言模块化编程

c语言模块化编程的方法

模块化设计原则:高内聚第一步:创建头文件(源文件与头文件同名如delay.c与delay.h)第二步:防止重复包含处理    在.h文件里加入#ifndefXXXX#defineXXXX.......#endif 例如:#ifndef_DELAY_H__#define_DELAY_H__.......#endif第三步: 代码封装(内部调用【.h封装外部调用的部分】)    封装成函数或者宏定义以便提高可读性和可修改文件,尽量少用或者不用全局变量第四步:使用源文件.c文件添加到文件中模块化编程实例:delay.h文件 #ifndef
发表于 2012-09-15 10:11:14

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved