单片机 C语言,如何调用外部自定义函数。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机 C语言,如何调用外部自定义函数。相关的知识,希望对你有一定的参考价值。

参考技术A 函数定义好以后,要被其它函数调用了才能被执行。C
语言的函数是能相互调用的,
但在调用函数前,必须对函数的类型进行说明,就算是标准库函数也不例外。标准库函数的
说明会被按功能分别写在不一样的头文件中,使用时只要在文件最前面用#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
函数之前定义的函数,在程序中就能不用写函数类型说明了。能在一个函
数体调用另一个函数(嵌套调用),但不允许在一个函数定义中定义另一个函数。还要注意
的是函数定义和说明中的“类型、形参表、名称”等都要相一致。

C语言 定义函数判断奇偶性

这学期新开C语言,自己对这门课比较感兴趣,所以预习了一些没学的东西。
然后看到这道题:
编程c语言输入一批正整数以0或负数为结束标志求奇数的和要求定义和调用函数even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0。
然后我这样写的,一片混乱,请问大大能否在这个的基础上榜坐下修改,使之成为正确的?
谢过谢过。。。

#include<stdio.h>
int main(void)

int x,Oshu,Jishu,i;
scanf("%d",&x);
int even(int n);
do
for(i=1;i<=x;i++)

if(n%2==0)

Oshu++;
return 1;

else
Jishu++;
return 0;


while(x>=0)
system("pause");
return 0;


根据你的,我调试了一下,但我不知道怎么加上("pause”)语句,现在还是看不到结果。。。
#include<stdio.h>
#include<stdlib.h>
int main(void)

int x;
int jishu=0;
int even(int n);
scanf("%d",&x);
while(x>0)

if(even(x)==0)
jishu=jishu+x;
scanf("%d",&x);

printf("%d",jishu);

//判断奇偶性子函数even
int even(int n)

if(n%2==0)
return 1;
else
return 0;

#include<stdio.h>
int main(void)

int x;
int jishu=0;
int even(int n);
scanf("%d",&x);
while(x>0)

if(even(x)==0)
jishu=jishu+x;
scanf("%d",&x);

prinf("%d",jishu)
//_____加在这里试试_____
system("pause")

//判断奇偶性子函数even
int even(int n)

if(n%2==0)
return 1
else
return 0

未测试 不过原理上没问题 ~看不懂的地方可追问追问

请看问题补充。。。

追答

已加入 在printf函数之后

参考技术A 猜你的意思是读入一串数字 ,然后统计数字中奇数偶数个数
#include<stdio.h>

int even(int n);
int main(void)

int x,Oshu=0,Jishu=0;
while(true)
scanf("%d",&x);
if(x<=0) break;
if(even(x))

Oshu++;

else
Jishu++;

;
printf("jishu:%d oushu:%d",Jishu,Oshu);
system("pause");
return 0;



int even(int n)
return n%2;
追问

这样是可以,但没有求奇数的和。。。麻烦给再看下。

以上是关于单片机 C语言,如何调用外部自定义函数。的主要内容,如果未能解决你的问题,请参考以下文章

有关C语言的内部函数和外部函数的定义说明

C语言中如何把结构体变量定义在主函数内,再调用一个自定义输入函数和输出函数

C语言 如何在一个文件中调用另一个文件的函数 用头文件

C语言 定义函数判断奇偶性

C语言中 delay 函数如何运用?

在C语言中怎样定义一个函数为“distance”?