函数要先声明后使用 | 您所在的位置:网站首页 › c语言程序变量必须先定义后使用 › 函数要先声明后使用 |
函数要先声明后使用
加入嵌入式技术QQ群:398294860,免费获取嵌入式技术文档,嵌入式最新学习路线指南,更多嵌入式教程,访问宅学部落淘宝店:https://wanglitao.taobao.com/
函数的参数和返回值都是有类型的,我们在给函数传参、或者接收函数的返回值时,一定要注意类型匹配:实参和形参的类型要匹配,接收返回值变量的类型和函数的返回值类型要匹配,否则程序可能会运行异常,或者留下隐患。 编译器在编译程序时,一般会做类型检查:检查函数的形参和调用者传给它的实参类型、个数是否一致,如果不一致,编译器一般会给一个警告。add函数有2个参数,如果我们在调用add函数时给它传递3个参数: #include int add(int a, int b) { int result; result = a + b; return result; } int main(void) { int sum; sum = add(3, 4, 5); printf("sum = %d\n", sum); return 0; }编译器在编译程序时就会检测到这个错误,并将错误信息打印出来,告诉程序的编写者问题出在了哪里: main.c: In function ‘main’: main.c:12:11: error: too many arguments to function ‘add’ sum = add(3, 4, 5); ^~~ main.c:3:5: note: declared here int add(int a, int b)编译器是怎么检测到错误的呢?很简单,编译器会根据你声明的函数类型,跟实际传进去的参数类型进行比较。因此,在引用一个函数之前,我们一定要先对这个函数进行声明,然后才调用。在上面的程序中,因为add函数的声明和定义都在main函数之前,所以在main函数中直接调用没问题。 在实际编程中,如果我们调用的函数在别的文件里定义,或者在文件的后面定义,这时候我们就要在调用点之前对函数进行显式声明了: #include int add(int a, int b); int main(void) { int sum; sum = add(3, 4); printf("sum = %d\n", sum); return 0; } int add(int a, int b) { int result; result = a + b; return result; }在上面的程序中,因为add函数的定义在main函数的后面,编译器在编译文件时,当分析到sum=add(3,4);这条语句时,并不知道sum函数到底长什么样,是什么类型,因此也就无法进行参数格式检查。为了不影响编译器的参数格式检查,我们可以在main函数之前对一个函数的类型进行声明: int add(int a, int b);这个声明对编译器非常有用,它会高速编译器这个函数的参数是什么类型,函数的返回值是什么类型。而对于编译器来说,此时它并不关心这个函数内部到底是怎么实现的,只要知道参数类型和返回值类型就已经够了。 专门为嵌入式设计的C语言进阶视频教程:《C语言嵌入式Linux高级编程》,一共9期,涉及计算机体系结构、ARM汇编与反汇编、程序的编译链接原理、堆栈内存、Linux内核的面向对象编程思想、多任务编程、C语言的模块化编程等专题,具体课程详情可点击淘宝:C语言嵌入式Linux高级编程 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |