【C语言】编译时常见报错#经验分享与解决方法

标题C语言库编译时常见报错#经验分享与解决方法

水墨不写bug 


 (图片来源于网络)

 

        有一句常说的话:一名程序员的工作时间,有三成在写代码,其余的七成都在调试。

        也就是:我写bug——我找我写的bug——修bug——直到程序按照我们的想法运行,也就是我们写出来让在自己满意的程序。

(一)报错与解决方法的区别

        报错是指在编程过程中出现的错误提示信息,标识了程序执行错误的原因和位置。而解决方法是指需要采取的行动来消除或修复报错的原因,以使程序正常运行。报错和解决方法之间的区别在于,报错是问题的体现,解决方法是解决问题的步骤或方案。报错是指出问题的地方,解决方法则是我们应该如何修复出问题的代码。因此,我们需要对报错信息进行正确的解读,并采取合适的解决方法来修复错误。

(二)常见错误:

        在写代码的过程中,我们在编译时会出现各种错误,有的编译器会报错,有的则不会;有的错误容易发现,有的则很难找出错误,在这里,我来分享一些常见的错误类型和实例:

(1)编译型错误

        也就是常见的语法错误(暂时这样认为),有一些会被编译器检测到,也就是违背语法规则,但有一些虽然不违背语法规则,能编译过去,但与我们想象的程序执行结果不同。

        我们可以点击编译器下方的叉号来找到错误:

i,可被编译器发现

        e.g.1

         如图,点击叉号后,会出现整个错误列表:(以少写  ’ ; ‘  为例)

        由于VS编译器比较智能,

        在错误列表中会有编译器的 说明,也就是错误信息;

        在 行 的列表中也标出来了错误代码的行数。

        此类错误,由于违背最基本的语法规则,借助编译器很容易被找到。

ii,不能被编译器发现

        e.g.2

if (arr[i] > max);
	{
		max = arr[i];
	}

        在上面这段代码中,我们 ” 不小心 ” 多写了一个分号,编译器会正常地接受if判断语句后代码的分号,而不会提示任何警告信息因此编译器对这段代码的处理与下面这段代码大不相同

if (arr[i] > max)
	{
		max = arr[i];
	}

        在if()后多了一个分号,实际上相当于:

if(arr[i] > max)
{
    ;
}
max = arr[i];

         e.g.3

if (n < 3)
		return
	max = arr[i];
	max = arr[j];
	max = arr[k];

        在上面这段代码中,不是多写了一个 “ ; ” ,而是少些了一个 “ ; ”,同样也会招致麻烦:

此处return后面遗漏了一个分号,然而这段代码在编译时让能通过,但会将语句:

max = arr[i];

  当作了return语句的操作数。上面这段代码实际上就相当于:

if (n < 3)
		reyurn max = arr[i];
	max = arr[j];
	max = arr[k];

        如果这段代码所在的函数声明其返回值为void,编译器会因为实际返回值的类型与声明返回值不一致而报错。

        然而,如果一个函数不需要返回值,我们通常在函数声明时省略返回值类型,这时编译器会默认将这个函数的返回值视作int型。

        如果这样,上面的错误就不会被编译器检测到。

iii,链接型错误

         此种错误类型一般是标识符名称不存在或者拼写错误:

        

        然而我们在定义 inti_Board() 函数时却把函数名称错写成  “ initBoard() ”:

        这时, 报错:

         报错信息:无法解析的外部符号——原因是编译器找不到我们调用的inti_Board()函数。

        这就是链接型错误的实例。

iv,运行时错误

         这种错误就十分隐蔽了,因为既它无法被编译器检测到,又没有任何报错,这时就需要我们自己通过调试来找bug了,这也就是本文开篇提到的通常情况下我们在找的bug。

(三)怎么找bug

        调试是找bug的高效方法,以下是VS调试的常用技巧:

        F5 —— 开始调试 / 跳到逻辑上下一个断点

        F9 —— 设置 / 取消断点

        F10 —— 逐行调试

        F11 —— 进入函数内部

        ctrl + F5 —— 开始运行,不调试

        shift + F5 —— 停止调试

断点介绍

        在条件语句处可设置条件断点:

        这样如果你想观察i从0到365的变化情况,就免去了按365次F10的尴尬操作了; 

回顾:

目录

(一)报错与解决方法的区别

(二)常见错误:

(1)编译型错误

i,可被编译器发现

ii,不能被编译器发现

iii,链接型错误

iv,运行时错误

(三)怎么找bug

断点介绍


希望本文对你有所帮助。


未经作者同意禁止转载

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水墨不写bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值