
C语⾔概述计算机基础计算机的组成计算机组成计算机能进⾏计算以及逻辑处理的设备硬件组成计算机的物理部件内存条、CPU、硬盘等开发中对于硬件的认知 硬件包括电⼦设备、单⽚机、集成电路和嵌⼊式系统。软件计算机中运⾏的程序和数据开发中对于软件的认知 软件分为系统软件OS、应⽤软件、编程⼯具编译器计算机的六⼤部件中央处理器CPU负责控制指令执⾏和数据计算内存临时存储程序运⾏时的指令和数据输⼊设备向计算机输⼊数据键盘、⿏标、扫码枪等输出设备将计算机处理结果输出显⽰器、打印机等外存储器永久存储数据硬盘、U盘等⽹络实现设备间的数据传输与通讯计算机⼯作原理存储程序程序和数据预先存储在内存中程序控制CPU按照指令顺序逐条执⾏操作计算机语⾔机器语⾔⼆进制代码可直接控制硬件执⾏效率最⾼汇编语⾔⽤助记符表⽰机器指令需通过汇编器翻译为机器语⾔⾼级语⾔贴近⼈类⾃然语⾔可读性强需要编译/解释执⾏如C/C,Java等C语⾔简史与特点C 语⾔的标准1989 年ANSI 发布⾸个完整 C 语⾔标准C89习惯称为 “ANSI C”1999 年ISO 发布修订完善后的 C99 标准C语⾔程序的开发过程开发的三个步骤① 编辑程序员编写源程序 .c ⽂件② 编译编译器将源代码转换可执⾏的⼆进制指令⽂件。③ 运⾏操作系统加载并执⾏可执⾏程序⼆进制指令⽂件。C语⾔程序的编译过程预处理 处理宏定义 #define 、头⽂件包含 #include 、注释等将头⽂件内容直 接拷⻉到当前⽂件。预处理需要⽤到预处理器。编译 对预处理后的代码进⾏语法分析语义检查⽣成汇编语⾔代码。编译需要⽤到编译 器。汇编将汇编代码转换为⼆进制代码⽣成⽬标⽂件。汇编需要⽤到汇编器。链接将⽬标⽂件与系统库⽂件、其他⽬标⽂件合并⽣成可执⾏⽂件。链接需要⽤到连接 器。编译的命令编译步骤命令文件类型转换说明预处理gcc -E *.c -o *.i*.c → *.i⽣成预处理后的 C 代码⽂本⽂件编译gcc -S *.c -o *.s*.i/*.c → *.s⽣成汇编代码⽂本⽂件汇编gcc -c *.c -o *.o*.s → *.o⽣成⼆进制⽬标⽂件⼆进制⽂件链接gcc *.c -o **.o → 可执行文 件⽣成可执⾏⼆进制⽂件C语⾔程序的基本结构⼀个简单的C语⾔程序功能在控制台输出“hello world!”#include stdio.h // 引入输入输出标准库printf() / scanf() // 主函数一个*.c有且仅有一个主函数作为程序执行的入口这个函数会自动执行 int main() { // 向控制台输出 hello world! 需要引入 stdio.h 头文件 \n 表示换行用在内部。 printf(hello world!\n); return 0; }程序结构分析注释⽤⽤解释代码逻辑仅给程序员阅读预处理阶段会被删除。预处理指令以 # 开头⽤于包含头⽂件、定义宏等如 #includestdio.h , #defi ne PI 3.14 主函数main函数程序的唯⼀⼊⼝由操作系统通过程序启动机制⾃动调⽤不能被⽤ ⼾⾃定义函数调⽤。函数组成函数头说明函数的返回值类型、函数名和形参列表若⽆形参则括号内留空或写 void举例main()main(void))函数体⽤ {} 括起来包含变量声明和语句执⾏的部分语句以;结尾函数调⽤语句调⽤已定义函数如 printf() 是标准库中的输出函数C语⾔编程规范要求C语⾔编程需要遵循以下规范提升代码可读性和可维护性缩进格式推荐缩进4个字符⼀个 tab 键统⼀代码层级⾜够注释对于关键代码如函数功能、复杂逻辑、变量含义添加注释 合适空⾏预处理指令与函数之间、函数与函数之间、全局变量与函数之间添加空⾏区分 代码模块 // 宏定义预处理时会直接替换宏名称为宏值 #define R 2 // 定义一个半径 #define PI 3.14 #include stdio.h int main(int argc,char *argv[]) { // 向控制台输出 hello world \n:换行 printf(hello world!\n); // 计算圆的面积 double area PI * R * R; printf(%f\n, area); return 0; }{}对⻬C/C中{和}需独占⼀⾏避免与Java⻛格混淆分层缩进与模块化函数体内的代码按逻辑层级缩进复杂逻辑拆分模块化int func() { if (..) { for (..) { printf(hello\n); } } if (..) { for (..) { printf(hello\n); } } }单句单⾏不将多条语句写在同⼀⾏ for(;;) 除外因其语法要求连续分号int main() { // 不推荐的写法 printf(hello\n); printf(world\n); printf(\n); int a 10; int b 20; // 推荐写法 for (;;) { ... } int aa 10; int bb 20; printf(hello\n); printf(world\n); printf(\n); }标识符命名函数名、变量名等都叫标识符命名要⻅名知意使⽤英⽂单词或短语避免 ⽆意义字⺟如 a , b int main() { // 不推荐的写法 int a 21; int b 168; int c 190; // 推荐的写法 int age 21; // 年龄 int height 168; // 身高 int weight 190; // 体重 }