C语言程序的错误和警告

一段C语言代码,在编译、链接和运行的各个阶段都可能会出现问题。编译器只能检查编译和链接阶段出现的问题,而可执行程序已经脱离了编译器,运行阶段出现问题编译器是无能为力的。

如果我们编写的代码正确,运行时会提示没有错误(Error)和警告(Warning),如下图所示:
Dev C++ 的提示
图1:Dev C++ 的提示

VC 6.0 的提示
图2:VC 6.0 的提示

C-Free 5.0 的提示
图3:C-Free 5.0 的提示
对于 VS、GCC、Xcode 等,如果代码没有错误,它们只会显示“生成成功”,不会显示“0个错误,0个警告”,只有代码真的出错了,它们才会显示具体的错误信息。
错误(Error)表示程序不正确,不能正常编译、链接或运行,必须要纠正。

警告(Warning)表示可能会发生错误(实际上未发生)或者代码不规范,但是程序能够正常运行,有的警告可以忽略,有的要引起注意。

错误和警告可能发生在编译、链接、运行的任何时候。

例如,puts("C语言中文网")最后忘记写分号;,就会出现错误,如下图所示:
VS2015 的错误提示
图4:VS2015 的错误提示

Dev C++ 的错误提示
图5:Dev C++ 的错误提示

VC 6.0 的错误提示
图6:VC 6.0 的错误提示

C-Free 5.0 的错误提示
图7:C-Free 5.0 的错误提示

可以看出,C-Free 的错误提示信息比较少,不方便程序员纠错。VC 和 VS 的错误信息类似,只是中英文的差别。

下图分析了 VC 6.0 的错误信息:
错误信息说明
图8:错误信息说明

翻译:源文件 E:\cDemo\hello.c 第5行发生了语法错误,错误代码是 C2143,原因是 'return' 前面丢失了 ';'。

我敢保证,你写的代码肯定会发生错误,一定要有分析错误的能力,这是一个合格的程序员必备的技能。

推荐文章
字符串输出函数puts()的作用是什么?

puts()函数用来向标准输出设备(屏幕)输出字符串并换行,具体为:把字符串输出到标准输出设备,将'\0'转换为回车换行。其调用方式为:puts(s)参数s:为字符串字符(字符串数组名或字符串指针)。

Java字符流的使用:字符输入/输出流、字符文件和字符缓冲区的输入/输出流

尽管Java中字节流的功能十分强大,几乎可以直接或间接地处理任何类型的输入/输出操作,但利用它却不能直接操作16位的Unicode字符。这就要用到字符流。本节将重点介绍字符流的操作。 字符输入流 R

关系型数据库是什么?

关系型数据库建立在关系型数据模型的基础上,是借助于集合代数等数学概念和方法来处理数据的数据库。现实世界中的各种实体以及实体之间的各种联系均可用关系模型来表示,市场上占很大份额的Oracle、MySQL

Python浮点数精度问题(包含解决方案)

前面章节提到,Python中浮点类型之间的运算,其结果并不像我们想象的那样,例如: >>>0.1+0.2 0.30000000000000004 >>>0.1+0.1-0.2 0.0 >>>0.1+

MySQL创建数据库(CREATE DATABASE语句)

在MySQL中,可以使用CREATEDATABASE语句创建数据库,语法格式如下: CREATEDATABASE[IFNOTEXISTS] [[DEFAULT]CHARACTERSET]  [[DE

子网掩码和网关是什么?

子网掩码子网掩码(subnetmask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合

Hibernate一级缓存详解

Hibernate中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份。其中一级缓存是Hibernate的内置缓存,在前面的学习中已经使用过。本节将针对Hib

linux netstat命令:网络状态查看命令

我们需要先简单了解一下端口的作用。在互联网中,如果IP地址是IP服务器在互联网中唯一的地址标识,那么大家可以想象一下:我有一台服务器,它有固定的公网IP地址,通过IP地址可以找到我的服务器。但是我的服

部署Go语言程序到Linux服务器

通过前面的学习相信大家对Go语言已经有了一定的了解,平时我们都是在本地进行开发调试访问的。那要怎么打包到服务器上呢?下面通过一个简单的实例来给大家介绍一下如何把我们写好的Go语言程序发布到服务Linu

C语言最大公约数和最小公倍数

从键盘输入两个正整数a和b,求其最大公约数和最小公倍数。 算法思想 利用格式输入语句将输入的两个数分别赋给a和b,然后判断a和b的关系,如果a小于b,则利用中间变量t将其互换。再利用辗转相除法求出最

C语言二分查找算法,折半查找算法

本实例采用二分查找法查找特定关键字的元素。要求用户输入数组长度,也就是有序表的数据长度,并输入数组元素和査找的关键字。程序输出查找成功与否,以及成功时关键字在数组中的位置。例如,在有序表11、13、1

Linux dmesg命令:显示开机信息

通过学习《Linux启动管理》一章可以知道,在系统启动过程中,内核还会进行一次系统检测(第一次是BIOS进行加测),但是检测的过程不是没有显示在屏幕上,就是会快速的在屏幕上一闪而过那么,如果开机时来不

Go语言与C/C++进行交互

Go语言是类C的语言,与C语言有着千丝万缕的联系,在Go语言的代码中可以直接调用C语言代码,但不支持直接调用C++。 Go调用C/C++的方式: C:直接调用CAPI; C++:通过实现一层封

PHP mysqli_select_db():选择数据库

通过前面《mysqli_connect()函数》的介绍我们知道,对应数据库名称的参数是可以省略的,如果省略该参数的话,就需要我们在后面来指定一个默认的数据库。PHP中可以使用mysqli_select

jQuery内容伪类选择

“内容”伪类选择器,指的是根据元素的内部文本或者子元素来选取元素的一种伪类选择器。在jQuery中,常用的“内容”伪类选择器如表1所示。 表1:“内容”伪类选择器 选择器 说明 :

c语言注释是什么?

在编写C语言源代码时,应该多使用注释,这样有助于对代码的理解。在C语言中有两种注释方式:一种是以/*开始、以*/结束的块注释(blockcomment);另一种是以//开始、以换行符结束的单行注释(l

网站地图(sitemap)的作用和格式

网站地图又称“站点地图”,它就是一个页面,是存放网站所有重要链接的容器。一般该页面会放置网站上所有希望搜索引擎重点抓取的页面链接(如图1所示)。 图1:迈锐光电网站地图 多数网站的链接层次比较

操作系统的功能和作用

操作系统提供环境以便执行程序。它为程序及程序用户提供某些服务。当然,提供的具体服务随操作系统不同而不同,但还是有些是共同的。这些操作系统服务方便了程序员,使得编程更加容易。图1显示操作系统服务及其相互

MySQL比较运算符一览表(带解析)

当使用SELECT语句进行查询时,MYSQL允许用户对表达式的左边操作数和右边操作数进行比较,比较结果为真,则返回1,为假则返回0,比较结果不确定则返回NULL。MySQL支持的比较运算符如下表所示。

Java修改Eclipse编辑器字体大小

在第一次使用Eclipse编写程序时,由于Eclipse默认使用的是Cosnolas字体,字号为10,所以编辑器中的字体非常小,不方便查看。 我们可以通过下面所示的方法来修改编辑器的字体大小。如图1