C 知识量:16 - 74 - 317
通过一个简单的程序来初步了解一下C语言的语法。
#include <stdio.h> int main(void) { printf("hello,world!\n"); }
以上是一个典型的“你好,世界!”程序,将打印“hello,world!”。下面分行解析一下:
#include <stdio.h> 表示包含标准输入/输出库的信息,这样就可以在程序中调用输入输出的库函数。
main(void) 表示名为main的函数,main函数是C语言的主函数,程序总是从main函数开始执行,括号内表示传递的参数,void表示这里不需要向其传递参数。
{ 表示函数体以大括号{开始。
printf("hello,world!\n"); 表示打印语句,语句以分号结束。printf()是标准输入/输出库的库函数,引号内的“hello,world!\n”称为字符串(或字符串常量),作为printf()函数的参数,其中\n表示换行。
} 表示函数体以大括号}结束。
下面进一步解释一下第一个示例中的细节。
1、#include<stdio.h>
这条语句的作用是把stdio.h文件中的所有内容都添加到该行所在的位置,本质上就是对stdio.h文件的拷贝和粘贴。
#include代码是一条C预处理器指令,C编译器在编译前会对源代码做一些准备工作,即预处理。
所有的C编译器软件包都提供stdio.h文件,它包含了输入/输出函数(例如:printf()),因此,stdio.h被称为标准输入/输出文件。需要注意的是,并不是所有的程序都需要输入/输出函数,因此不是所有的程序都包含stdio.h文件。
通常情况下,在C程序顶部的信息集合被称为头文件,#include<stdio.h>就是头文件。
2、int main(void)
main()函数是一个非常特别的函数,C程序总是从main()函数开始执行。main()函数名称不可更改,且每一个完整的程序必须包含一个main()函数,main()函数又称为主函数。
int代表着main()函数的返回值类型,表示函数将返回给系统一个整数。
main后面的括号“()”表示它是一个函数,函数后面一定会有个一个括号。括号里面是要传递给该函数的参数,如果没有需要传递的参数,就设为void。以前的C版本可以空着什么也不写,最新的标准要求填入void,推荐按照最新的标准来写,这样在不同系统迁移时不会有意外发生。
3、花括号、函数体和块
花括号“{}”将程序代码包裹起来,表示其包裹的内容是函数main()的所属代码,被花括号包裹的部分称为函数体,用于实现函数的主要功能。
除了定义函数体外,花括号还可以将多条语句包裹起来,从何将这些语句合并为一个块(或称为单元)。
4、printf()函数
printf("hello,world!\n")表示打印“hello,world!”并打印一个回车。printf()函数是标准输入/输出库(stdio.h)中的函数,这里能够直接调用printf()函数,而不用先定义什么是printf(),正是因为前面已经包含了stdio.h,stdio.h已经对printf()函数进行了定义。
\n代表一个换行符,效果如同在键盘上按Enter键一样。换行符是一个转义序列,转义序列用于代表难以表示或无法输入的字符。除了\n以外,\t代表Tab键,\b代表Backspace键,除此之外,还有很多转义序列。
编写C程序时难免会犯错误,程序的错误通常叫做bug,找出并修正错误的过程叫做调试(debug)。程序的错误可以分为:语法错误和语义错误。
语法错误 是指不遵循C语言的规则而犯的错误,例如语句结尾漏掉分号等等。排除语法错误的方法:一是在编译之前,浏览源代码,看是否有明显的语法错误。二是编译时,编译器会检查源代码,这也是编译器的工作之一,它会报告每处错误的性质和具体位置。
语义错误 是指意思表示上的错误,即程序即使顺利运行,也没有按照自己的意图返回正确的结果。也就是说如果源代码遵循了C规则,没有语法错误,但是结果不正确,那就是犯了语义错误。对于排除语义错误,编译器是无能为力的,方法之一就是跟着程序的执行顺序,一步一步的分析程序状态。
程序状态是在程序的执行过程中,某给定点上所有变量值的集合。通过逐步跟踪程序的执行步骤,并记录每个变量,就可以监视程序的状态。分析程序状态是发现语义错误的基本手段。
调试程序的技巧总结:
编译前检查一遍源代码,看是否有明显的语法错误。
通过编译器的反馈,发现和修改语法错误。
跟踪程序的执行顺序,一步一步分析程序状态,发现和修改语义错误。
在程序的关键点临时插入输出代码(例如:printf()),把想要查看的变量作为参数传递给输出代码,监视变量值的情况是否符合预期。
使用调试器检查更加复杂的程序。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6