C程序中引用自定义的C函数模块

原文:C程序中引用自定义的C函数模块

  我们知道,刚开始接触C语言编程,一般都是在一个.c或者.cpp(以下只说.c)的文件中编写代码,其中一定会有一个入口函数,

也就是main()函数,你可以将程序代码全部写在main函数里,当然如果你想要程序更加模块化,也可以将一些操作写在一个函数

里,这些函数的声明和定义也都是在main函数中。

  想想,随着你的代码量越来越大,实现的功能越来越多,在一个.c文件中,你定义了许许多多的函数,这些函数实现着不同功能,

并且都是混杂在一起,你会不会感觉看着自己写的代码感觉自己的脑子也乱了?在这里我找到了一个方法来将程序变得更加模块化,

更加有条理。总的做法分以下几步:

1.将功能相近的自定义函数的声明写在一个.h文件中(比如:Math.h)

2.将这些函数的具体实现写在.c文件中(比如:Math.c  注意要包含头文件  #include "Math.h" )

3.在你的主程序(支持.c文件格式)中包含头文件(#include "Math.h"),在主程序就可以调用这些自定义函数了

 

  我们现在想要C函数模块,该模块提供数学计算的功能(例如加、减、乘、除等计算功能),自定义函数写在Math.h中,函数的

实现写在Math.c中,在主函数main.c中调用这些函数进行测试。

一、编写Math.h文件

 1 #ifndef _MATH_H
 2 #define _MATH_H
 3
 4 #include <stdio.h>
 5
 6 /*
 7   自定义函数的声明
 8 */
 9 //加
10 int Add(int a,in b);
11 //减
12 int Sub(int a,int b);
13 //乘
14 int Multi(int a,int b);
15 //除
16 double Dev(int a,int b);
17 // ...
18 #endif

 

二、编写Math.c文件

 1 #include <stdio.h>
 2 #include "Math.h"   //必须添加!!!
 3
 4 int Add(int a,int b)
 5 {
 6    return a+b;
 7 }
 8
 9 int Sub(int a,int b)
10 {
11    return a-b;
12 }
13
14 int Multi(int a,int b)
15 {
16    return a*b;
17 }
18
19 double Dev(int a,int b)
20 {
21    if(b==0)
22    {
23        printf("\n除数不能为0.");
24        return 0.0;
25    }
26    return (double)a/b;
27 }

 

三、测试:main.c(支持.c文件格式)调用模块中的函数

 1 #include <stdio.h>
 2 #include <conio.h>
 3 #include "Math.h"  //添加自定义函数的头文件
 4
 5 void main()
 6 {
 7   int a=15,b=10;
 8
 9   //调用自定义函数
10   printf("a+b=%d\n", Add(a,b) );
11   printf("a-b=%d\n", Sub(a,b) );
12   printf("a*b=%d\n", Multi(a,b) );
13   printf("a/b=%f\n", Dev(a,b) );
14
15   getch();
16   return;
17 }

注意:在VC6.0中添加主程序代码时需要添加.c格式的(main.c),添加.cpp格式的(main.cpp)会报错,

         具体原因还不知道,希望知道的可以告知!

程序运行的结果:

 

附:以上的内容为本人从《C语言科学与艺术》一书中的学习的总结,供大家学习和分享。

 

时间: 2024-11-20 13:17:26

C程序中引用自定义的C函数模块的相关文章

c++问题-C++的类中怎么在一个函数中引用上一层的函数

问题描述 C++的类中怎么在一个函数中引用上一层的函数 在同一个类中怎么引用先定义的函数来定义函数?比如在一个时期类的定义中,一个日期加1的函数中怎么调用先定义的一个求是否闰年的函数. 解决方案 C++定义隐式转换函数将类转换为内部的一个成员变量c++函数默认参数是一个好的设计吗? 解决方案二: 直接在函数内调用就可以了.不知道你说的上一层是什么意思.是基类的函数还是集合类所属的对象的函数,前者直接调用,或者用 基类类名::函数名后者用构造函数传对象指针 解决方案三: 同一个类中的函数都是通过t

INNO SETUP卸载程序中加入自定义窗体

原文:INNO SETUP卸载程序中加入自定义窗体 [Setup] AppName=My Program AppVerName=My Program v.1.2 DefaultDirName={pf}/My Program [Files] Source: Files/*; DestDir: {app} [Code] const bidDelAll = 1; bidSkipAll = 2; var Form: TSetupForm; CheckListBox: TNewCheckListBox;

.Net中把图片等文件放入DLL中,并在程序中引用

原文:.Net中把图片等文件放入DLL中,并在程序中引用 [摘要] 有时我们需要隐藏程序中的一些资源,比如游戏,过关后才能看到图片,那么图片就必须隐藏起来,否则不用玩这个游戏就可以看到你的图片了,呵呵. 本文就讲述了如何把文件(比如图片,WORD文档等等) 隐藏到DLL中,然后在程序中可以自己根据需要导出图片进行处理. 注:本站原创,转载请注明本站网址:http://www.beinet.cn/blog/ [全文] 第1步: 我们要生成一个资源文件,先把要隐藏的文件放入到这个资源文件中 (资源文

Android实现在xml文件中引用自定义View的方法分析

本文实例讲述了Android实现在xml文件中引用自定义View的方法.分享给大家供大家参考,具体如下: 在xml中引用自定义view 方法一: <view class="com.test.copytext.CopyText" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 方法二: <view class="com.

详解Android XML中引用自定义内部类view的四个why_Android

今天碰到了在XML中应用以内部类形式定义的自定义view,结果遇到了一些坑.虽然通过看了一些前辈写的文章解决了这个问题,但是我看到的几篇都没有完整说清楚why,于是决定做这个总结. 使用自定义内部类view的规则 本文主要是总结why,所以先把XML布局文件中引用内部类的自定义view的做法摆出来,有四点: 1.自定义的类必须是静态类: 2.使用view作为XML文件中的tag,注意,v是小写字母,小写字母v,小写字母v: 3.添加class属性,注意,没有带android:命名空间的,表明该自

详解Android XML中引用自定义内部类view的四个why

今天碰到了在XML中应用以内部类形式定义的自定义view,结果遇到了一些坑.虽然通过看了一些前辈写的文章解决了这个问题,但是我看到的几篇都没有完整说清楚why,于是决定做这个总结. 使用自定义内部类view的规则 本文主要是总结why,所以先把XML布局文件中引用内部类的自定义view的做法摆出来,有四点: 1.自定义的类必须是静态类: 2.使用view作为XML文件中的tag,注意,v是小写字母,小写字母v,小写字母v: 3.添加class属性,注意,没有带android:命名空间的,表明该自

php中引用(变量和函数名前加&amp;符号)用法

  在 PHP 中引用意味着用不同的名字访问同一个变量内容.这并不像 C 的指针,它们是符号表别名.注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字.PHP的引用是通过在变量名或者函数名前加&符号来实现的.下面解释一下引用的几种用法: 先来看官方法的说明 引用做什么 PHP 的引用允许用两个变量来指向同一个内容.意思是,当这样做时: <?php $a =& $b; ?> 这意味着 $a 和 $b 指向了同一个变量. Note: $a 和 $b 在这

在非MFC程序中引用CString

CString在当今软件设计界里还是小有名气的,说它是MFC中使用的最多的类一点也不过,然而在使用sdk编windows程序的时候,确不能利用CString类,只能用sdk的运行时库,比如strlen,strcpy,strstr等等,本文讨论的是在非mfc程序中使用CString类的方法,算是个引子,如果有更好的实现方法,欢迎大家讨论. 为了使用CString类,首先源文件必须是以cpp结尾的,这是因为vc默认对不同的扩展名采用不同的编译方法和错误检查,mfc的支持文件Afx.h只有由cpp为扩

PHP5程序中新增加日期(date)函数的常量

  PHP 5.1.1 起定义有以下常量来提供标准日期表达方法,可以用于日期格式函数(例如 date()). DATE_ATOM(string) 原子钟格式(如:2005-08-15T15:52:01+00:00) DATE_COOKIE(string) HTTP Cookies 格式(如:Mon, 15 Aug 2005 15:52:01 UTC) DATE_ISO8601(string) ISO-8601(如:2005-08-15T15:52:01+0000) DATE_RFC822(str