2019 木犀星计划 C 语言学习
C 语言简介
C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。
C 语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序设计中备受青睐,成为最近 25 年使用最为广泛的编程语言。当前,C 语言编译器普遍存在于各种不同的操作系统中,例如 Microsoft Windows、macOS、Linux、Unix 等。C 语言的设计影响了众多后来的编程语言,例如 C++、Objective-C、Java、C#等。
C 语言的特点
- 易于学习。
- 结构化语言。
- 它产生高效率的程序。
- 它可以处理底层的活动。
- 它可以在多种计算机平台上编译。
C 语言发展历程
K&R C -> C89 -> C99 -> C11
C 语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来,主要用于重新实现 Unix 操作系统。此时,C 语言又被称为 K&R C。其中,K 表示 Kernighan 的首字母,而 R 则是 Ritchie 的首字母。他们写过 C 语言领域最经典书籍《C 程序设计语言》。现在 K&R 标准已经被淘汰。
由于 C 语言被各大公司所使用(包括当时处于鼎盛时期的 IBM PC),因此到了 1989 年,C 语言由美国国家标准协会(ANSI)进行了标准化,此时 C 语言又被称为 ANSI C。中国学校 C 语言教材大部分是基于 C89 标准的。
在随后的几年里,C 语言的标准化委员会又不断地对 C 语言进行改进,到了 1999 年,正式发布了 ISO/IEC 9899: 1999,简称为 C99 标准。C99 标准引入了许多特性,包括内联函数(inline functions)、可变长度的数组、灵活的数组成员(用于结构体)、复合字面量、指定成员的初始化器、对 IEEE754 浮点数的改进、支持不定参数个数的宏定义,在数据类型上还增加了 long long int 以及复数类型。目前这个标准的应用相当广泛。
Linux 下的 C 语言开发
在很多人的眼里,C 语言和 linux 常常是分不开的。这其中的原因很多,其中最重要的一部分我认为是 linux 本身就是 C 语言的杰出作品。当然,linux 操作系统本身对 C 语言的支持也是相当到位的。作为一个真正的程序员来说,如果没有在 linux 下面用 C 语言编写过完整的程序,那么只能说他对 C 语言本身的理解还相关肤浅,对系统本身的认识也不够到位。作为程序员来说,linux 系统为我们提供了很多理想的环境,这其中包括了下面几个方面:
- 完善的编译环境,包括 gcc、as、ld 等编译、链接工具
- 强大的调试环境,主要是 gdb 工具
- 丰富的自动编译工具,主要是 make 工具
- 多样化的 os 选择,ubuntu、redflag 等等
- 浩瀚的开源代码库
当然,不管我怎么说,最终朋友们还是应该自己勇敢地跨出前进的第一步。如果还没有过 Linux 编程经验的朋友可以首先在自己的 pc 上面安装一个虚拟机,然后就可以在 shell 下面编写自己的 C 语言代码了。
如果您想要设置 C 语言环境,您需要确保电脑上有以下两款可用的软件, 文本编辑器 和 C 编译器 。
文本编辑器
文本编辑器将用于输入您的程序。常用的文本编辑器包括 Windows Notepad 和 vim/vi。
文本编辑器的名称和版本在不同的操作系统上可能会有所不同。例如,Notepad 通常用于 Windows 操作系统上,vim/vi 可用于 Windows 和 Linux/UNIX 操作系统上。
通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。C 程序的源文件通常使用扩展名 ".c"。
在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。
设置默认编辑器为 vim
sudo update-alternatives --config editor
选择
vim.basic
编译器
写在源文件中的源代码是人类可读的源。它需要"编译",转为机器语言,这样 CPU 可以按给定指令执行程序。C 语言编译器用于把源代码编译成最终的可执行程序。
Linux 下最常用的 C 语言编译器是 gcc,一般系统是自带的。终端输入
gcc --version
查看 gcc 的版本
这里再推荐安装一些工具
sudo apt install build-essential manpages manpages-dev
build-essential 里面包含了很多开发必要的软件包,很全很方便。
manpages 是 Linux 下的手册,可以随时查阅资料。比如你忘记了 pow 函数的用法,只需要
man pow
就会出现详细的信息供你参考。
编写简单的 C 语言程序
打开终端,输入
vi test.c
,进入编辑模式输入
保存退出后,你会看到当前目录多出了一个 test.c 文件,文件里保存的是你输入的源代码。
终端输入
ls -l && cat test.c
看看效果。( ls 命令列出文件,cat 命令输出文件内容 )
终端输入
gcc test.c
,回车,编译代码。如果代码中没有错误,命令提示符会跳到下一行,并生成 a.out 可执行文件。
终端输入
./a.out
来执行程序。你可以看到屏幕上显示 "Hello World"
如果想指定编译后输出的文件名,可以使用
gcc test.c -o test
。其中 test 为可执行文件(Linux 识别文件不需要后缀名,但为了方便还是会用)
我们知道计算机中所有的文件都是以二进制的方式储存的,现在来看看我们写的程序是如何用二进制表示的。
源代码部分:终端输入
od -Ad -tcd1 -w1 test.c
回车
左边第一列是地址(10 进制),地址从 0 开始不断往后延伸,表示数据存放的位置,每个地址可以存放 1 个字节的数据。右边一列上面是你输入的字符,下面是字符对应的数字(十进制)。
可执行文件部分:终端输入
od -Ad -tx a.out
,文件内容是用 16 进制表示的。