函数定义好以后,要被其它函数调用了才能被执行。C
成都创新互联网站建设公司是一家服务多年做网站建设策划设计制作的公司,为广大用户提供了成都网站设计、网站建设,成都网站设计,1元广告,成都做网站选成都创新互联,贴合企业需求,高性价比,满足客户不同层次的需求一站式服务欢迎致电。
语言的函数是能相互调用的,
但在调用函数前,必须对函数的类型进行说明,就算是标准库函数也不例外。标准库函数的
说明会被按功能分别写在不一样的头文件中,使用时只要在文件最前面用#include
预处理语
句引入相应的头文件。如前面一直有使用的
printf
函数说明就是放在文件名为
stdio.h
的
头文件中。调用就是指一个函数体中引用另一个已定义的函数来实现所需要的功能,这个时候函
数体称为主调用函数,函数体中所引用的函数称为被调用函数。一个函数体中能调用数个
其它的函数,这些被调用的函数同样也能调用其它函数,也能嵌套调用。笔者本人认为
主函数只是相对于被调用函数而言。在
c51
语言中有一个函数是不能被其它函数所调用的,
它就是
main
主函数。调用函数的一般形式如下:
函数名
(实际参数表)
“函数名”就是指被调用的函数。实际参数表能为零或多个参数,多个参数时要用逗
号隔开,每个参数的类型、位置应与函数定义时所的形式参数一一对应,它的作用就是把参
数传到被调用函数中的形式参数,如果类型不对应就会产生一些错误。调用的函数是无参函
数时不写参数,但不能省后面的括号。
在以前的一些例子我们也能看不一样的调用方式:
1.函数语句
如
printf
("Hello
World!n");
这是在
我们的第一个程序中出现的,它以
"Hello
World!n"为参数调用
printf
这个库函数。在这里函数调用被看作了一条语句。
2.函数参数
“函数参数”这种方式是指被调用函数的返回值当作另一个被调用函数的实际参
数,如
temp=StrToInt(CharB(16));CharB
的返回值作为
StrToInt
函数的实际参数传递。
3.函数表达式
而在上一篇的例子中有
temp
=
Count();这样一句,这个时候函数的调用作为一个运算
对象出现在表达式中,能称为函数表达式。例子中
Count()返回一个
int
类型的返回
值直接赋值给
temp。注意的是这种调用方式要求被调用的函数能返回一个同类型的值,
不然会出现不可预料的错误。
前面说到调用函数前要对被调用的函数进行说明。标准库函数只要用#include
引入已
写好说明的头文件,在程序就能直接调用函数了。如调用的是自定义的函数则要用如下形
式编写函数类型说明
类型标识符
函数的名称(形式参数表);
这样的说明方式是用在被调函数定义和主调函数是在同一文件中。你也能把这些写到
文件名.h
的文件中用#include
"文件名.h"引入。如果被调函数的定义和主调函数不是在同
一文件中的,则要用如下的方式进行说明,说明被调函数的定义在同一项目的不一样文件之上,
其实库函数的头文件也是如此说明库函数的,如果说明的函数也能称为外部函数。
extern
类型标识符
函数的名称(形式参数表);
函数的定义和说明是完全不一样的,在编译的角度上看函数的定义是把函数编译存放在
ROM
的某一段地址上,而函数说明是告诉编译器要在程序中使用那些函数并确定函数的地
址。如果在同一文件中被调函数的定义在主调函数之前,这个时候能不用说明函数类型。也就
是说在
main
函数之前定义的函数,在程序中就能不用写函数类型说明了。能在一个函
数体调用另一个函数(嵌套调用),但不允许在一个函数定义中定义另一个函数。还要注意
的是函数定义和说明中的“类型、形参表、名称”等都要相一致。
1、首先建头文件是为了声明c文件中的函数,以及包括宏定义。建立头文件要有对应的c文件。
2、要写头文件首先要建一个.h文件。
3、打开h文件,进行编辑。建立头文件是有一定步骤的。要用到#ifndef。。。#define。。。。#endif。这是为了避免重复定义。
4、#ifndef后面要写的是头文件名称的大写。例如:test.h要写成__TEST_H__。前面与后面是两个下划线。字母用大写。
5、然后在define与endif中间声明函数名,记得写冒号。
6、然后在main文件中写上include这个头文件,就可以调用了。
7、最后编译,运行,就完成了。
在源文件A1.c中调用A2.c 中的函数有两种方法:
1、在A2.c中有完整的函数定义,在A1.c中添加一下要用到的函数原型(声明)就可以了,例如:
在A2.c中:有函数void A2(){...};。
在A1.c中:在文件前头增加一行:void A2();就可以了。
2、把A2.c中完整定义的函数的原型,写到一个A2.h文件中,然后在A1.c的文件头增加#include "A2.h"就可以了。
以上两种方法,在A1.c中都可以正常的调用,就跟在A2.c中调用一样。
其实函数默认是外部的,只要在其他文件中声明就能使用;但是注意如果在前面加上static,就只能在本文件中使用了,不能再被其他的文件调用。
扩展资料:
1、一个.h文件要 对应有一个.c文件,这样链接器就可以调用这个文件里的函数。比如a.h 和 a.c。
2、把相应的函数定义写在.c文件中。这里要强调一点:要加上#include ".h",这个一般作为一种工程规范。因为如果.c文件中的函数也需要调用同个.c中的其它函数,那么这个.c往往会include对应的.h。比如头文件里进行了变量的声明,这个时候对应的.c文件是一定要加上这个头文件的。
3、再在其他的main.c文件开头添加#include "a.h"。
1、外部函数extern时声明这个函数为外部函数,本文件不做定义,只调用,编译不会出错,但不能运行(没有函数实体)。如果想有运行结果就必须将函数实体包含进来,所以文件包含和extern是配合使用的。文件包含只需要包含.h就是实体的头文件,但有些软件貌似不能识别头文件和c的关系,所以就只能包含.c文件。
2、也就是说外部函数extern只是个声明,他告诉编译器我用到了一个外部函数,但如果该文件没有将函数实体包含进来,编译器是找不到的,依然是不能运行的,所以extern只是个声明,并没有做任何事,只是这样是没用的。include是包含一个文件,就是类似于该文件复制到此处(只是说类似,其实是个查找路径,让编译器去该路径查找函数)。