【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

断点介绍


希望本文对你有所帮助。


未经作者同意禁止转载

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2301_79465388/article/details/133919788

智能推荐

Static+递归_java 中static中递归-程序员宅基地

文章浏览阅读1.3k次。static: 是我们main函数的一种修饰符 静态修饰符:标识成员可以被类直接调用 static五种修饰1:静态成员变量2:静态方法变量3: 静态代码块4: 静态内部类5: 静态导包 package cn.biji; public class StatinTest { ..._java 中static中递归

Atcoder 2152 Boxes and Candies(模拟 + 水题)_atcoder arc064a-程序员宅基地

文章浏览阅读729次。题目链接:http://abc048.contest.atcoder.jp/tasks/arc064_a?lang=enC - Boxes and CandiesTime limit : 2sec / Memory limit : 256MBScore : 300 pointsProblem StatementThere are N bo_atcoder arc064a

半桶水开发 CMPP2.0 with Spring + JPA 3-程序员宅基地

文章浏览阅读147次。[list][*][url=http://rikugun.iteye.com/blog/296384]半桶水开发 CMPP2.0 with Spring + JPA 1[/url][*][url=http://rikugun.iteye.com/blog/296439]半桶水开发 CMPP2.0 with Spring + JPA 2[/url][*][url=http://rik..._springboot cmpp2.0

【2024-01-14】各种安卓模拟器安装magisk(magisk-delta) 雷电、蓝叠、MuMu、逍遥、夜神_magisk terminal emulator-程序员宅基地

文章浏览阅读6.9k次,点赞36次,收藏44次。使用Magisk Delta在各种模拟器安装Magisk到System分区的过程_magisk terminal emulator

大数据之Hive:Hive中日期时间函数_hive date format函数-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏5次。目录1.date_format函数(根据格式整理日期)2.date_add函数(加减日期),date_sub,date_diff3.next_day函数4.last_day函数(求当月最后一天日期)1.date_format函数(根据格式整理日期)hive (gmall)> select date_format('2021-03-20','yyyy-MM');2020-03备注:与mysql中date_format函数的不同之处是:在hive中,可以指定为"yyyy-MM",在mysql中必_hive date format函数

转贴 解决sd卡的读写问题_hc32f460 sd 卡 micro sd卡-程序员宅基地

文章浏览阅读1.6k次。最近sd卡读写出了问题,参考一篇网志解决。http://sns.linuxpk.com/space-1717-do-blog-id-15748.html 在embedded linux下插上一个U盘,在/dev/scsi/ 目录下,出现了4个part 。把该U盘插在pc机,在windows下_hc32f460 sd 卡 micro sd卡

随便推点

(完美)华为畅玩7A AUM-AL00的Usb调试模式在哪里打开的步骤-程序员宅基地

文章浏览阅读1.2k次。当我们使用PC链接安卓手机的时候,如果手机没有开启usb调试模式,PC则不能够成功检测到我们的手机,有时候我们使用的一些功能强大的app好比以前我们使用的一个app引号精灵,老版本就需要打开usb调试模式下使用,现当新版本不需要了,因此我们需要找方法将手机的usb调试模式打开,以下内容我们记录一下华为畅玩7A AUM-AL00如何开启usb调试模式的步骤。接着,在华为畅玩7A AUM-AL00应用..._荣耀7a没有uab调试吗

几个建议投的SCI期刊_cleaner environmental systems是sci吗-程序员宅基地

文章浏览阅读1.1w次。(1)Advanced Science Letters(SCI)(2)Sensor Letters (SCI)(3)Computers &amp; Electrical Engineering (SCI)(4)International Journal of Computational Intelligence Systems (SCI)(5)Future Generation Computer ..._cleaner environmental systems是sci吗

json如何传富文本为java_采用Json字符串,往服务器回传大量富文本数据时,需要注意的地方,最近开发时遇到的问题。...-程序员宅基地

文章浏览阅读683次。json字符串中存在常规的用户输入的字符串,和很多的富文本样式标签(用户不能直接看到,点击富文本编辑器中的html源码按钮能看到),例如下面的:富文本<>sad<span>adzx我是用户输入富文本<>sad<span>adzx我是用户输入例如存在这种情况,需要把上面的这段字符串通过一个json格式,post到服务器端,假设这段字符串被赋给变量a :..._前端传递富文本数据需要注意什么

用栈解决括号配对问题_栈与括号配对-程序员宅基地

文章浏览阅读355次。时间限制:3000 ms | 内存限制:65535 KB难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0&lt;N&lt;=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四..._栈与括号配对

EasyUI集成Kindeditor使用(☆)-程序员宅基地

文章浏览阅读306次。EasyUI集成Kindeditor使用 在实际的项目中,我们需要在项目中集成富文本编辑器,而kindeditor作为一款优良的编辑器,在项目中或多或少都会用到!实际效果图 使用方法:1.首先下载Kindeditor编辑器,我这里使用的是4.1.10版本。下载地址:http://kind...

html页面播放rtsp流媒体_html播放rtsp流-程序员宅基地

文章浏览阅读2.7k次。采取的方案node.js + Ffmpeg + jsmpeg工具node.js 下载路径https://pan.baidu.com/s/1DYnPW28hZz-I56jOopwxGQFfmpeg下载路径:https://pan.baidu.com/s/1KEGIYrRVLnLyDx1hwx4yBAjsmpeg下载路径:https://pan.baidu.com/s/1p5SnShAlTB..._html播放rtsp流

推荐文章

热门文章

相关标签