函数要先声明后使用 您所在的位置:网站首页 c语言程序变量必须先定义后使用 函数要先声明后使用

函数要先声明后使用

2024-07-17 18:26| 来源: 网络整理| 查看: 265

函数要先声明后使用 加入嵌入式技术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 实验室设备网 版权所有