C语言函数常见错误调试:零基础也能看懂的实战教程

admin C语言 8


刚学 C 语言的朋友,是不是一写函数就报错?编译的时候屏幕上一堆堆红色提示,看得头都大了?“函数未声明”“参数不匹配” 这些错误,简直是新手的家常便饭。别慌,今天兔子哥就把这些常见错误扒出来,手把手教你咋调试,就算零基础基础也能看明白。毕竟 “C 语言函数报错怎么办”“调试技巧” 这些,都是大家常搜的问题,看完这篇保准有收获。
先给大家列个常见错误表格,一眼的时候对号入座就行:
错误类型典型错误代码报错提示(大概意思)解决办法
函数未声明main(){add(2,3);} int add(int a,int b){...}隐式声明‘add’把函数定义放 main 前面,或加声明
参数数量不匹配int add(int a){...} main(){add(2,3);}传递参数太多检查调用和定义的参数个数是否一致
返回类型不匹配int add(int a,int b){...} main(){add(2.5,3);}参数类型不兼容保证实参和形参类型一致
返回值类型不对int add(){return 3.5;}返回类型与函数声明不匹配让返回值类型和函数定义一致

咱们先说说函数没声明这个错。很多朋友写代码的时候,习惯把 main 函数放最前面,然后才定义其他函数。比如先写 main,里面调用 add,可 add 的定义在 main 后面,这时候编译器就会说 “不知道 add 是啥”。这时候咋办?要么简单,要么把 add 的定义挪到 main 前面去,要么在 main 前面加一句 “int add (int a,int b);”,告诉编译器后面有这么个函数。我们在使用的时候,养成先声明函数的习惯,能少不少麻烦。
再说说参数不匹配的问题,这个错太常见了。比如你定义的函数要两个参数,调用的时候却传了三个,或者顺序搞反了。就像写了个交换函数 void swap (int a,int b),调用的时候写成 swap (b,a),虽然结果可能对,但要是函数里有依赖参数顺序的操作,就麻烦了。还有参数类型,定义的是 int,你传个 float 进去,编译器可能不报错,但算出来的数能让你懵圈。所以调用函数前,一定得对着函数定义看看,参数的数量、类型、顺序对不对。
返回值的坑也不少。比如函数定义成 int 型,里面却 return 一个字符串,编译器肯定不答应。还有些朋友写函数的时候,忘了加 return 语句,尤其是在有分支的情况下。比如 int max (int a,int b){if (a>b) return a;},要是 b 更大,这函数就没返回值了,运行起来结果乱七八糟。这时候就得检查每个分支是不是都有 return,返回的类型对不对。
可能有人会问,调试的时候怎么快速找到错在哪?兔子哥教你个土办法,多加点 printf。比如怀疑参数传错了,就在函数开头把参数打印出来;怀疑返回值不对,就在 return 前把结果打出来。这样一步步看,很快就能定位问题。比如调用 add (2,3),函数里打印 a 和 b,发现 a 是 2,b 是 0,那肯定是调用的时候传错参数了。
还有个新手容易犯的错,就是递归函数没终止条件。比如写个算阶乘的函数,int fact (int n){return n*fact (n-1);},忘了写 n==1 的时候 return 1,结果函数会一直调用自己,最后程序崩溃。这时候就得在递归函数里加个判断,让它算到某个值的时候停下来。
那编译器报的错看不懂咋办?其实不用全看懂,抓住关键词就行。比如报错里有 “undeclared”,八成是函数没声明;有 “argument”,可能是参数不对;有 “return type”,就是返回值的问题。把这些关键词记下来,下次看到就知道大概往哪方面找错了。
最后说点我的心得。调试函数错误,耐心比啥都重要。别看到一堆报错就慌,一个一个解决,总能搞定。刚开始可以慢一点,把每个错误都搞明白,下次就不容易再犯。兔子哥刚开始学的时候,也经常因为少个分号、多传个参数折腾半天,多练练就好了。希望这些技巧能帮到你,有啥调试不了的问题,也可以留言问我。

标签: 手把手 零基础

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~