C语言笔记 by kingwei 1 概述 1.1 发展历史 C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。 C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体,因此也有人称它为中级语言。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类计算机上,从而形成了多种版本的C语言。 目前最流行的C语言有以下几种: ·Microsoft C 或称 MS C ·Borland Turbo C 或称 Turbo C ·AT&T C 1.2 程序结构举例 本文档中列举的代码均在Dev-C++中运行通过。 下面这个程序先重定向标准输入输出流,然后,从文件in.txt中读取数据,调用标准库函数qsort,升序排序后输出到文件out.txt。 #include <stdio.h> /* 包含头文件 */ #include <stdlib.h> #define MAX_LENGTH 100 /* 宏定义 */ int length; /* 定义全局变量 */ int list[MAX_LENGTH]; int Comp(const void *p1, const void *p2) /* 定义函数体 */ { int e1 = *((int *)p1); /* 定义局部变量 */ int e2 = *((int *)p2); if (e1 > e2) /* 分支结构(if-else) */ return 1; else if (e1 < e2) return -1; else return 0; /* 向主调函数返回值 */ } int main() /* 主函数 */ { int i; freopen("in.txt", "r", stdin); /* 顺序结构 */ freopen("out.txt", "w", stdout); while (scanf("%d", &length) != EOF) /* 循环结构(while) */ { for (i=0; i<length; i++) /* 循环(for)控制输入 */ scanf("%d", &list[i]); qsort((void *)list, length, sizeof(int), Comp); for (i=0; i<length; i++) /* 循环(for)控制输出 */ printf("%d ", list[i]); printf("\n"); } return 0; /* 进程向系统返回值 */ } 1.3 编译、连接 任何一种计算机语言都要从某种人们容易理解的形式(源代码)转化成计算机可以执行的形式(机器指令)。对于C语言程序,首先需要对源代码作预处理,预处理器(preprocessor)对预编译指令进行处理,生成的代码通常存放在一个中间文件中。然后使用编译器(compiler),将中间文件编译成为目标文件。最后经过连接器(linker),将目标模块和库进行连接,并添加启动模块,才能最终成为系统可以加载和执行的程序。 开发环境 编译(compile) 连接(link) (工具) C源文件 --------------> 目标文件 ------------>最终文件 Windows *.c *.obj *.exe 可执行文件 (VC) *.lib 静态库文件 *.dll 动态库文件 Linux *.c *.o *.--- 可执行文件 (KDevelop) *.a 静态库文件 *.so 动态库文件 因此,将TC、VC等程序设计软件称为编译器是不恰当的,这些软件是集成了编辑、预处理、编译、连接、调试等工具的集成开发环境。以Dev-C++为例,它提供了一个窗口界面的编辑环境和一些配置选项,但内部编译器仍然是gcc/g++、内部调试工具是gdb.exe。

评论