本文是笔者在阅读<<C语言入门经典(第5版)>>时的读书笔记,文章内部分是书中的内容.
标准库的概念
标准库定义了编写C程序时常常需要的常量、符号和函数。它还提供了基本的C语言的可选扩展。库提供的标准功能包括大多数程序员都可能需要的功能,例如:处理文本字符串或者数学计算,这样就免除了自己实现这些功能所需要的大量精力。标准库在一系列标准文件——头文件中指定。头文件的扩展名总是.h。为了使一组标准功能可用于C程序文件,只需要将对应的标准头文件包含起来
#include <头文件.h>
C程序的创建过程
- 编辑
编辑就是创建和修改C程序的源代码 - 编译
编译就是通过编译器,将源代码转化成机器语言 - 链接
链接器(linker)将源代码文件中由编译器产生的各种对象模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将他们组合成一个可执行的文件. - 执行
执行就是当成功完成了前述3个过程之后,运行程序.
注释
注释的方法一共有两种, 第一种是 /* 和 */ , 二者搭配使用, 位于 二者之间的任意文本都是注释, 例如:
/* 注释文字 */
第二种 //
可以在 代码行的末尾 添加一个注释, 例如
printf("Hello World!"); //输出Hello World
预处理命令的概念
#include <stdio.h>
这个代码行严格来说不是可执行程序的一部分, 但是 它很重要, 因为没有它程序是不能执行的.
符号#表示这是一个预处理命令, 用来告诉编译器在编译源代码之前先执行一些操作. 预处理指令相当多, 大多放在程序的开头.
main() 函数
我们先来看下面5行指令
int main(void)
{
printf("Hello World");
return 0;
}
main()函数相当于程序的入口, 当程序开始执行的时候, 操作系统会执行这个程序的main()函数
定义main()函数的第一行代码如下
int main(void)
它定义了main()函数的起始, 注意这行代码的末尾没有分号. 定义main()函数的第一行代码开头是一个关键字 int , 它表示main()函数的返回值的类型, 关键字 int 表示整数型.
return 0;
return语句结束main()函数的执行, 把 0 返回给操作系统. 从main() 函数返回0 值表示程序正常终止, 反之, 非0表示程序异常结束.
main()函数可以调用其他函数, 这些函数又可以调用其他函数. 对于每个被调用的函数, 都可以在函数名后面的括号中给函数传递一些信息, 当执行到return 语句时, 就停止执行该函数, 将控制权返回给上一层.
需要知道的是
- 函数头指函数定义的开头和函数名称
- 每个函数花括号中的部分称作函数体
- 花括号起到定义函数开头和结尾的作用
关键字(亦称"保留字")
关键字即有特殊意义的字, 所以不能将其作为他用. C语言中所有的保留字如下.
auto | break | case | char |
---|---|---|---|
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
inline | int | long | register |
restrict | return | short | signed |
sizeof | static | srtuct | switch |
typedef | union | unsigned | void |
volatile | while | _Alignas | Alignof |
_Atomic | _Bool | _Complex | _Generic |
_Imaginary | Noreturn | _Static_assert | _Thread_local |
参数
以代码printf("Hello World")
为例, 函数名后面的圆括号内的项称为参数, 一般用它来传递数据.当传送的参数多于一个的时候, 要用逗号分开
输出信息
上例中,printf()就是一个标准的库函数, 它将函数名后面的引号内的信息输出到命令行上
控制符
举个例子,在printf()语句中, 在文本的开头或者末尾增加了字符\n, 它就代表换行符. 反斜杠\在文本字符串里面有特殊的意义, 它表示转义序列的开始
转义序列 | 说明 |
---|---|
\n | 换行 |
\r | 回车 |
\b | 后退一格 |
\f | 换页 |
\t | 水平制表符 |
\v | 垂直制表符 |
\a | 发出明响 |
? | 插入问号 |
\" | 插入双引号 |
\' | 插入单引号 |
\\ | 插入反斜杠 |
三字母序列
现在三字母序列不会出现, 因为第二个问号用其转义序列指定. 使用三字母序列时, 编译器会发出一个警告,因为通常是不应当适用三字母序列的