1.C语言是可移植语言,在一种系统中编写的C程序稍作修改或不修改就能在其他系统运行,如需修改,也只需简单更改主程序头文件中的少许项即可。
2.现代计算机由多种部件构成。中央处理单元CPU承担绝大部分的运算工作,随即存取内存RAM是存储程序和文件的工作区,永久内存存储设备(过去一般指机械硬盘,现在还包括固态硬盘)即使在关闭计算机后,也不会丢失之前储存的程序和文件,外围设备键盘鼠标监视器等提供人与计算机之间的交互。
3.CPU的工作原理:从内存中获取并执行一条指令,再从内存中获取并执行下一条指令...CPU由若干个寄存器组成,每个寄存器都可以储存一个数字。一个寄存器储存下一条指令的内存地址,CPU使用该地址来获取和更新下一条指令。在获取指令后,CPU在另一个寄存器中储存该指令,并更新第一个寄存器储存下一条指令的地址。CPU能理解的指令有限,这些指令的集合叫指令集。
4.储存在计算机中的所有内容都是数字,计算机以数字形式储存数字和字符。每个字符都有一个数字码。计算机载入寄存器的指令也以数字形式储存,指令集中的每条指令都有一个数字码。计算机程序必须最终以数字指令码即机器语言来表示。
5.高级编程语言如C简化了编程工作,首先,不必用数字码表示指令,其次,使用的指令更贴近你如何想这个问题。使用高级编程语言,可以在更抽象的层面表达你的想法,不必考虑CPU在完成任务时具体需要哪些步骤。例如两数相加可以这么写:total=mine+yours;而机器语言写成它会是多条以数字码形式表现的指令,编译器就是把高级语言程序翻译成计算机能理解的机器语言指令集的程序,可以使用合适的编译器或编译器集,便可把一种高级语言程序转换成供不同类型CPU使用的机器语言程序。
6.第一个ANSI/ISO C标准 最终版本叫C89或C90
7.1994年发布了C99标准,2011发布了C11标准(都属于新标准)
8.写代码之前要定义程序目标和设计程序,即先规划再动手
9.用C语言编写程序时,编写的内容被储存在文本文件中,该文件被称为源代码文件,在大部分C系统,都要求文件以.c结尾,在.前面的部分称为基本名,在.后面的部分称为扩展名,基本名与扩展名的组合就是文件名。
10.C编程的基本策略是用程序把源代码文件转换为可执行文件(其中包含可直接运行的机器语言代码),典型的C实现通过翻译和链接两个步骤来完成这一过程。编译器把源代码转换为中间代码。链接器把中间代码和其他代码合并,生成可执行文件。中间文件有多种形式,我们这里描述的是最普遍的一种形式,即把源代码转换为机器语言代码,并把结果放在目标文件中。目标文件包含机器语言代码,但是不能直接运行该文件,因为目标文件中储存的是编译器翻译的源代码,缺失启动代码(程序和操作系统之间的接口),比如,可以在MC Windows或Linux系统下运行IBM PC兼容机,这两种情况所使用的硬件相同,所以目标代码相同,但是Windows或Linux所需的启动代码不同,因为这些系统处理程序的方式不同。目标代码还缺少库函数,比如某个c程序中使用了Printf()函数,目标代码文件并不包含该函数的带啊吗,只包含了使用printf()函数的指令,printf()函数真正的代码储存在另一个被称为库的文件中,库文件中有许多函数的目标代码。
链接器的作用是把你编写的目标代码、系统的标准启动代码和库代码这三部分合并成一个文件,即可执行文件。
简而言之,目标文件和可执行文件都是由机器语言指令组成的,然而,目标文件中只包含 编译器为你编写的代码翻译的机器语言代码,可执行文件还包含你编写的程序中使用的库函数和启动代码的机器代码。在有些系统中,必须分别运行编译程序和链接程序,而在另一些系统中,编译器会自动启动连接器,用户只需给出编译命令即可。
11.UNIX系统:C语言因UNIX而生。
1.在UNIX系统上编辑:
UNIX区分大小写,所以budget.c、BUDGET.c、Budget.c是三个不同但都有效的C源文件名。但BUDGET.C是无效文件名,因为扩展名用了大写C而不是小写c。
2.在UNIX上编译:我们需要编译器将我们编写的源代码翻译成机器能看懂的机器代码,最后生成的可执行文件中包含计算机要完成任务所需的所有机器代码。以前,UNIX C编译器要调用语言定义的cc命令,但已经淘汰。
如果要储存可执行文件(a.out),应该把他重命名,否则,该文件会被下一次编译程序时生成的新a.out文件替换。
如何处理目标代码?C编译器会创建一个与源文件基本名相同的目标代码文件,扩展名为.o,在该例子中,目标代码文件是Inform.o,然而,却找不到这个文件,因为链接器一旦生成了完整的可执行程序,就会将其删除,但如果原始程序有多个源代码文件,则保留目标代码文件,学到后面多文件程序时,就会明白这样的好处。
12.GNU编译器集合和LLVM项目:
GNU项目是一个开发大量免费UNIX软件的集合。
GNU编译器集合(也被称为GCC,其中包含GCC C编译器)是该项目的产品之一。GCC的C编译器紧跟C标准的改动,GCC有各种版本以适应不同的硬件平台和操作系统,包括UNIX,WINDOWS,LINUX,用gcc命令就可调用GCC C编译器,许多使用gcc的系统都用cc作为gcc的别名。
LLVM项目成为cc的另一个替代品该项目是与编译器相关的开源软件集合/它的Clang编译器处理C代码,可以通过clang条用,有许多版本供不同的平台使用,包括LINUX,Clang也对最新的C标准支持的很好。
GNU和LLVM都可以使用-v选项来显示版本信息,因此各系统都使用cc别名来代替gcc或clang命令,cc-v显示你所使用的编译器及其版本。
gcc和clang命令都可以根据不同的版本选择运行时选项来调用不同C标准。
(这个右上角的1只是注释,如下)
第一行调用c99标准,第二行调用GCC接受C11之前的草案标准,第三行调用GCC接受的C11标准版本。Clang编译器在这一点上用法与GCC相同。
13.Linux系统
Linux是一个开源、流行、类似于UNIX的操作系统,可在不同平台包括PC和Mac上运行,在LINUX中准备C程序和在UNIX系统中几乎一样,不同的是要使用GNU提供的GCC公共域C编译器,编译命令类似于:gcc inform.c
注意,在安装Linux时,可选择是否安装GCC,如果之前没有安装GCC,则必须安装,通常,安装过程会将cc作为gcc的别名,因此可以在命令行中使用cc来代替gcc
了解GCC和最新发布的版本:http://www.gnu.org/software/gcc/index.html
14.PC的命令行编译器:
源代码文件应该是文本文件,不是字处理器文件(字处理器文件包含许多额外的信息,如字体和格式等),因此,要使用文本编辑器来编辑源代码,如果使用字处理器,要以文本模式另存文件,源代码文件的拓展名应该是.c,一些字处理器会为文本文件自动添加.txt扩展名,这时要把txt改成c
通常C编译器生成的中间目标代码文件的扩展名是.obj,也可能是其他的,与UNIX编译器不同,这些编译器在完成编译后通常不会删除这些中间文件,有些编译器生成带.asm扩展名的汇编语言文件,而有些编译器使用自己特有的格式。一些编译器在编译后会自动运行链接器,另一些要求用户手动运行链接器,在可执行文件中链接的结果是,在原始的源代码基本名后面加上.exe扩展名,比如编译和链接concrete.c源代码文件,生成的是concrete.exe文件,可以在命令行输入基本名来运行该程序:C>concrete
15.集成开发环境(Windows)
许多供应商都提供Windows下的集成开发环境,或称为IDE(目前大多数IDE都是C和C++结合的编译器)
可能会遇到:在程序执行完毕后,执行程序的窗口立即消失,如果不需要这种情况,可以让程序暂停,直到按下ENTER键,窗口才消失,即可以子啊程序的最后(return之前)添加下面一行代码:
getchar();
改行读取一次键的按下,所以程序在用户按下Enter键之前会暂停,有时根据程序的需要,可能还需要一个击键等待,这种情况下,必须用两次getchar();