第一章 概览
起源
贝尔实验室的Dennis Ritchie
在1972年开发了C,当时他正与Ken Thompson
一起设计UNIX
操作系统。
C来自于Thompson
的B语言。
C语言的特点
- 设计特性:C是融合了控制特性的现代语言,其设计使得用户可以自然地采用自顶向下的规划、结构化的编程,模块化的设计。这种做法使得程序更可靠,更易懂。
- 高效性:设计上利用了当前计算机能力的优点。C程序往往很紧凑且运行速度快,可以细调获得最大速度及内存使用率。
- 可移植性:在一个系统上编写的C程序经过很少或不修改就可以在其他系统运行。如果修改是必要的,通常只需改变伴随主程序的一个头文件的几项内容即可。
- 强大的功能和灵活性: Python,Perl,BASIC等的编译器和解释器都是C编写的。
- 面向编程人员:允许访问硬件,操纵内存中的特定位,具有丰富的运算符,能简洁地表达自己的意图。
- 缺点:自由程度高,增加风险,可能会编写极难理解的代码。
计算机工作的基本原理
CPU处理一条一条机器指令,每个寄存器保存一个数,一个寄存器保存下一条指令的内存地址。
高级计算机语言与编译器
C语言程序更易于人类理解,但是机器无法理解,需要使用编译器将其翻译为机器语言。
使用C语言的七个步骤
- 定义程序目标
- 设计程序
- 编写代码
- 编译
- 运行程序
- 测试和调试程序
- 维护和修改程序
编程机制
源文件: 文件中包含程序员使用任何语言编写的代码。
目标代码:包含着机器语言代码,它并不需要是完整的程序代码。
可执行文件:包含组成可执行程序的全部机器语言代码。
源文件被编译器翻译为目标代码,链接器再把(库和启动代码与已编译的源代码)目标代码连接生成可执行文件。
UNIX系统编译
第二章 C语言概述
简单的C语言实例
#include<stdio.h>
int main(void)
{
int num;
num = 1;
printf("I am a simple ");
printf("computer.\n");
printf("My favorite number is %d because it is first.\n",num);
return 0;
}
#include指示和头文件
C编译器在编译前要对源代码做一些准备工作:称为预处理(preprocessing)
#include
语句是C预处理指令(preprocessor directive)实际上是一种剪切和粘贴操作,方便多个程序共用信息。
语言标准
1989年C89 (ANSI C)
1990年C90 (ISO C)
1994年C99 (ANSI/ISO)
基本概念
- main函数
main()
C90标准勉强支持,C99不支持。
main函数返回值是返回给操作系统的。
int main()
C99标准,括号留空默认为void,与老版本保持兼容性。
C90支持函数原型即void butler(void);
,而早起的C只能指定返回类型而省略参数描述void butler();
。
- 变量
声明时变量分配了空间(有地址),如果没有进行赋值则它的值是不确定的。
#include<stdio.h>
int main()
{
int unknown;
printf("%ld\n",sizeof(unknown));
printf("%p\n",&unknown);
printf("%d\n",unknown);
unknown = 1;
printf("%p\n",&unknown);
printf("%d\n",unknown);
return 0;
}
输出为
4
0x7fffc21c2124
32767
0x7fffc21c2124
1
变量名区分大小写,选择有意义的变量名有利于可读性。
变量名由大小写字母,数字和下划线组成,不能是关键字,不能是数字和下划线(为了避免和C库冲突)开头。
-
注释
C语言默认注释是/* 注释内容 */
,C99增加了`//``与Java和C++保持一致。 -
调试
- 语法错误:一般先检查前面一两个错误。
- 语义错误: ①手工追踪 ②使用printf语句 ③使用调试器
-
其他
C规定在开始处先声明变量,C99标准允许使用时再分配变量。
;
分号是语句的一部分。
\t
表示Tap
,\b
表示退格符。
网友评论