高级语言-Lec1
C语言简介——划时代的意义
一、硬件耦合时代的编程困境
在IBM 360之前,计算机采用定制化架构:
硬件绑定:每台机器拥有独特的指令集和内存布局,工程师需为不同机型重写代码
知识壁垒:程序员必须掌握寄存器配置、中断处理等底层细节,开发效率低下
复用难题:汇编代码与硬件强关联,移植成本高昂
二、C语言的革命性突破
作为首个真正意义上的高级语言,C语言通过抽象层实现软硬件解耦:
- 硬件无关性
指针/内存操作等特性保留对硬件的可控性,但通过编译器实现指令集转换
典型示例:printf() 函数封装了绘制文字的具体实现,开发者无需了解物理显示器分辨率及缓存
- 标准化接口
通过预处理器和标准库(如stdio.h)统一硬件交互方式
同一份C代码可经不同编译器生成适配 x86/ARM 等平台的机器码
- 知识分工重构
软件工程师专注算法与逻辑设计
硬件工程师专注指令集优化
编译工程师负责跨平台适配
三、产业级影响验证
Unix系统:1970年代用C语言重写,实现跨7种硬件平台运行
嵌入式开发:现代STM32等芯片通过标准C库降低开发门槛
数据佐证:据IEEE统计,C语言使软件复用率提升300%(1975-1985)
四、面向过程 vs. 面向对象
- 面向过程:像烹饪食谱的线性思维
以C语言为例,面向过程将程序分解为步骤序列,核心是函数调用与参数传递。
- 典型场景:计算矩形面积时,需分别编写
calculateArea()和calculatePerimeter()函数,通过参数传递长宽数据 - 局限性:若需求变更(如增加圆形计算),需修改所有相关函数,代码耦合度高
- 面向对象:像组装乐高的模块化思维
C++通过类与对象实现数据与行为的封装:
- 类设计:例如
Student类包含name属性和study()方法,属性与方法绑定为整体 - 扩展性:新增
Teacher类时,可通过继承复用Person基类的共有方法
- 对比案例:外卖系统设计
- 面向过程实现
void orderFood() { /* 步骤1: 点餐 */ }
void deliverFood() { /* 步骤2: 配送 */ }
// 需手动协调函数调用顺序
- 面向对象实现
class Customer { public: void order() {...} };
class Rider { public: void deliver() {...} };
// 对象自主完成行为,系统通过消息交互
面向对象是建立在面向过程的基础之上的,因此,要先学会面向过程的编程方法。
C语言代码
你的第一C代码
#include <stdio.h>
/*
我
是
多行
注释
*/
int main() {
// 我是单行注释
printf("Hello, World!");
}
#预处理语句
C语言的预处理语句是在编译前由预处理程序处理的特殊指令,以#开头,主要包括以下类型:
- 宏定义
#define用于定义标识符(宏名)替换文本,分为无参宏和带参宏。无参宏如#define PI 3.14,编译时会将代码中的PI替换为3.14;带参宏类似函数,如#define MAX(a,b) ((a)>(b)?(a):(b)),但需注意参数括号避免优先级错误。宏展开由预处理程序自动完成,不占用运行时开销。
- 文件包含
#include用于将头文件内容插入当前位置,分为两种形式:(1)
#include <stdio.h>:搜索系统标准目录。
(2)#include "myheader.h":优先搜索当前目录,再搜索系统目录
头文件通常包含函数声明、宏定义等,避免代码重复。
- 条件编译
通过条件指令选择性编译代码块,常见形式包括:
(1)#ifdef/#ifndef:检查宏是否定义,常用于跨平台适配,如#ifdef SUN ... #endif。
(2)#if/#elif/#else:基于常量表达式判断,如#if DEBUG == 1。
条件编译可优化代码移植性和调试灵活性。
- 其他预处理指令
(1)
#undef:取消已定义的宏。
(2)#pragma:编译器特定功能指令(如优化提示)。
(3)#error:强制编译错误并输出消息。
预处理阶段不进行语法检查,仅做文本替换和条件筛选,最终生成中间文件供编译器处理。合理使用预处理能提升代码可维护性和跨平台兼容性。
头文件:用于包含一些别人已经完成的代码
stdio.h:标准输入输出头文件
标准输入设备:键盘
标准输出设备:显示器
斜杠
(1)斜杠(Slash,除号),例如:除号 2/3,也可用于注释
- 单行注释:双斜杠
// - 多行注释:
/*
STanDard Input/Output
sadgfw
wet
*/
(2)反斜杠(Backslash)
int
整数数据类型(integer),在此作为函数的返回值类型
- 返回0:任务成功完成
- 否则:失败!(编码会对应原因)
main函数:
主函数,也即整个程序的入口函数
该程序从大括号后面的第一条语句开始执行,直到右大括号结束
遵循从上到下的顺序
printf()函数:用于在屏幕上输出内容
最简单的使用方式:直接用一对双引号把要输出的内容引起来
分号:所有的正常C语言语句都需要以分号结束
注意:除了双引号内,其余所有标点(括号)均需英文标点,否则报错!
return 0; 函数返回值语句
执行到此,就说明程序成功结束了。
快捷键
Ctrl+A:全选
Ctrl+C:拷贝
Ctrl+V:粘贴
Ctrl+N:新建文件
Ctrl+W:关闭当前文件
F11:编译并执行(如果语法出错则不能执行)
Ctrl+Alt+A QQ截屏
win+shift+s 截屏

浙公网安备 33010602011771号