K&R笔记(一)

花了四个多月的时间阅读完英文版SICP前三章,速度真心慢,不过锤炼了阅读能力,裸考六级给过了。下一步我准备先将SICP后两章缓一缓,期间先阅读完《The C programming Language》(K&R),想想体验到编程的乐趣就是通过学校的C语言课程,阅读这本C语言经典希望重新认识C。

搭建环境

关于C的环境,知乎上建议如果是学习的话不要使用IDE,容易忽视一些细节,自己手动编译,链接,对C语言的运行机制会有更清晰的理解。我选择的编译器是MinGW-w64,安装教程参考《在Windows中安装MinGW-w64》

Chapter 1

  • K&R第二版涵盖了ANSI C语言标准,ANSI C在1989年批准通过,1990年被批准为ISO标准,称为C90。GCC支持C90, 不完全支持C99。在不指定C标准的情况下,GCC默认使用GNU C。 我的GCC版本是7.1.0,默认GUN 11。
    参考:Options Controlling C Dialect

  • 书中编写的程序都很实用,开篇的程序涉及读写操作,这儿有个问题,如何显示地输入EOF,

1
2
3
4
5
6
7
PS E:\Workbench> gcc -Wall b1_6.c -o b1_6
PS E:\Workbench> ./b1_6
10010 10086
10000
^Z
dights = 9 4 0 0 0 0 1 0 1 0, white space = 3, other = 0
PS E:\Workbench>

Windows下输入Ctrl+z输入EOF,注意在新行之下。

  • 字符串常量以字符数组的形式存储,数组的各元素分别存储字符串的各个字符,并以’\0’标志字符串的结束。

  • 声明外部变量,可以用extern语句显式声明,也可以通过上下文隐式声明。如果外部变量的定义出现在使用它的函数之前,那么这个函数中就没必要使用extern显示声明。不建议使用外部变量。

  • 人们通常把变量和函数的extern声明放在一个单独的文件中,便是头文件,后缀名.h约定为头文件名的拓展名。