点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
主页:
一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?spm=1011.2682.3001.5343感悟:
今天我认为最重要的就是:vim编辑器的快捷指令(使用方法)
目录
嵌入式开发:文件和目录相关命令
1.命令pwd
pwd
是 Linux 和 Unix 类操作系统中一个非常基础且常用的命令,它的全称是 Print Working Directory(打印工作目录)。
作用
pwd
命令的核心功能是 显示当前终端会话中你所在的目录路径。简单来说,当你在终端中操作时,通过执行 pwd
可以快速知道自己当前 “身处” 文件系统的哪个位置。
示例
假设你的终端当前处于用户主目录下的 Documents/project
文件夹中,输入 pwd
后,终端会输出该路径:
/home/你的用户名/Documents/project
补充说明
该命令没有复杂的参数,最常用的就是直接输入
pwd
并回车。它常与
cd
(切换目录)、ls
(列出目录内容)等命令配合使用,帮助用户在文件系统中定位和导航。在某些特殊场景下,
pwd
可能会显示不同的路径(如处理符号链接时),但默认情况下,它展示的是当前所在目录的绝对路径(从根目录/
开始的完整路径)。
总之,pwd
是一个用于 “定位自身位置” 的便捷工具,对于终端操作来说是基础中的基础。
2.命令ls
常用的选项是:
ls -l (列举权限出来) ls -a (将隐藏文件一起列举出来) ls -R (列举包含目录文件的递归)
3.命令查看文件内容:cat
cat -s :合并多个空行变成一个空行显示 cat -b :显示行号 《 = 》 等效于:nl 文件名
4.复制命令:cp命令
基本语法:
cp 源文件 目标路径:保留原文件名复制
cp 源文件 新文件名:复制并重命名
关键选项:
-i:覆盖前交互提示(安全防护)
-r:递归复制目录及其内容
实用技巧:
支持同时复制多个文件到目录:cp file1 file2 dir/
路径表示:
相对路径:../表示上级目录
绝对路径:/home/linux/完整路径
5.文件移动命令:mv
双重功能:
移动文件:mv 文件 新路径
重命名:mv 旧文件名 新文件名
复合操作:
移动+重命名:mv test3.c ../test_three.c
批量操作:
支持同时移动多个文件
注意事项:
与复制命令不同,移动后原位置文件会消失
重命名本质是在同一目录下的移动操作
6.创建和删除文件命令:touch和rm
touch命令:
创建新文件:touch 新文件名(创建0字节文件)
更新时间戳:对已存在文件使用会更新修改时间
示例:touch a.c创建空C源文件
rm命令:
普通文件:rm 文件名
目录:必须加-r参数递归删除
安全选项:
-i:删除前确认(建议常备)
危险操作:
不加-r删除目录会报错
无提示删除可能导致数据丢失
7.创建和删除目录命令:mkdir和rm -r
mkdir命令:
基本创建:mkdir 目录名
级联创建:mkdir -p dir1/dir2(自动创建父目录)
删除目录:
必须使用rm -r 目录名递归删除
操作验证:
可用ls -R查看目录树结构确认创建结果
8.vi编辑器的使用(1)
8.1 三种模式:
命令行模式: 用户在用vi编辑文件时最初进入的模式,可以进行复制、粘贴等操作。
插入模式:按“i” 进行文件编辑,按ESC键可以回到命令行模式。
底行模式: 光标位于屏幕的底行,可以进行文查找、替换、列出行号等操作。
8.2 插入模式中的常用命令
在 Vim 编辑器中,a
和 i
是进入插入模式的常用命令,用于在文本中插入或添加内容。但它们的具体插入位置有所不同:
a
/A
a
:在当前光标所在位置之后进入插入模式,新输入内容会接在光标后。比如光标在 “te|st” 的|
处(即 “t” 和 “e” 间 ),按a
后输入 “x”,就变成 “texst”。A
:直接跳到当前行的行尾,然后进入插入模式,输入内容追加在行末尾。像行内容是 “hello |world”(|
为光标位置 ),按A
输入 “!” ,就成 “hello world!” 。
i
/I
i
:在当前光标所在位置之前进入插入模式,新内容插在光标前。例如光标在 “t|est” 的|
处,按i
输入 “x” ,变为 “txest” 。I
:直接跳到当前行的行首,进入插入模式,输入内容添加在行开头。若行是 “|hello world”(|
为光标位置 ),按I
输入 “hi” ,就成 “hi hello world” 。
o
/O
o
:在当前光标所在行的下方,新建一行空白行,光标跳到这新行的行首,进入插入模式,方便在下方新增内容。比如当前行是 “第一行”,按o
后,下方出现空白行,可直接输入 “第二行内容” 。O
:在当前光标所在行的上方,新建一行空白行,光标移到新行行首进入插入模式,用于在上方插入内容。如当前行是 “第二行”,按O
后,上方出现空白行,可输入 “第一行内容” 。
8.3 便捷命令
[N]x
:删除光标位置起的 N 个字符(默认 1 个),删除内容会存入编辑缓冲区(可理解为 “剪切”,删的内容能粘贴 )。[N]dd
:删除(剪切)光标所在行起的 N 行内容,存入编辑缓冲区。[N]yy
:复制光标所在行起的 N 行内容到编辑缓冲区(“拷贝” 核心命令 )。p
/P
:从缓冲区取内容粘贴;p
贴在光标后,P
贴在光标前。u
:撤销上一步操作(比如误删、误改时,快速回退 )。
这些是 vi/vim 文本编辑里常用的复制、移动、粘贴、撤销操作,掌握后能高效处理文本~
这是 vi 编辑器的保存和退出命令说明,各命令功能如下:
命令 | 功能解释 |
---|---|
:q |
退出未修改的文件;若文件有修改未保存,执行会无效(防止误关丢失内容) |
:q! |
强制退出,不保存任何修改内容(需谨慎用,避免丢数据) |
:w |
保存文件,但不退出 vi 编辑器(可继续编辑) |
:x |
等价于 :wq ,保存文件并退出(文件有修改时保存,无修改时直接退出) |
:w File |
把当前内容另存为指定文件 File (原文件内容不变) |
:r File |
把指定文件 File 的内容读入 / 插入到当前编辑文件的光标位置 |
这些是使用 vi/vim 时管理文件保存、退出的核心命令,日常编辑文本经常会用到~
9. vim编辑器使用(2)
快速定位:在命令模式中(使用以下内容)
行定位:
1G: 移动到文件第一行
G: 移动到文件最后一行
:n: 移动到第n行(如:10到第10行)
行号显示:
:set nu: 显示行号
:set nonu: 隐藏行号
vim中的查找:
基本查找:
查找字符串:
/string: 查找指定字符串(如/printf查找printf)
n: 向下继续查找
N: 向上继续查找
正则表达式支持:
/^string: 查找以string开头的行
/string$: 查找以string结尾的行
Vim中的替换
基本语法: 冒号开头表示底行命令,格式为:
范围s/旧字符串/新字符串/标志
范围省略: 当范围省略时,默认对当前行进行操作
特殊符号:
.表示当前行
$表示最后一行
%表示全文范围
-
当前行替换: :s/old/new 仅替换当前行第一个匹配项
指定行范围:
:10,15s/old/new/g 替换10-15行所有匹配项
:.,$s/old/new 从当前行到最后一行替换
全文替换:
:1,$s/old/new/g 从第一行到最后一行替换
:%s/old/new/g 全文替换的简写形式
嵌入式开发基础知识
编程基础知识
学习目的:掌握计算机基础知识有助于后续编程时的理解和应用
核心内容:包括计算机基本构成、程序语言发展过程和编程步骤等常识性知识
学习方法:已掌握者可复习巩固,未掌握者需认真学习这些基础概念
计算机基本结构
冯诺依曼模型
核心思想:包含硬件构成和存储程序两大核心概念
硬件组成:
CPU:包含运算器(执行实际运算)和控制器(取指令 / 数据)
存储器:主要指内存(程序运行时的临时数据存储)
输入设备:如键盘、手写板、串口等
输出设备:如显示器、文件、数据库等
工作方式:计算机通过顺序执行存储器中的程序指令来运行
应用范围:该模型适用于各类计算设备(PC、手机、开发板等)
存储器的分类
主存储器(内存):
功能:存储待处理数据和运算结果
特点:直接影响系统运行流畅度(如 Windows 需 5-6GB 空闲内存)
实例:内存条(2GB/4GB/8GB/16GB 等规格)
外存储器:
功能:长期保存数据的大容量存储
实例:硬盘、U 盘、SD 卡、Flash 等
寄存器:
位置:CPU 内部
特点:访问速度最快的高速存储器
功能:直接参与 CPU 运算过程
层级关系:
外存(硬盘 / Flash)→ 2. 内存 → 3. 寄存器
数据流向:程序文件从外存加载到内存,CPU 通过寄存器处理数据
硬件协作:包含 MMU(内存管理单元)进行地址映射
什么是程序
程序的定义
本质概念:广义上指为实现特定目标而预先设计的一组可操作工作步骤
英文术语:英文称为 "program",源自冯・诺依曼计算机体系结构思想
控制作用:计算机通过程序控制硬件组件(输入 / 输出设备、运算器、控制器、存储器)协同工作
程序从程序员角度看
执行文件本质:系统可直接识别的有序二进制指令集合(如 Windows 的.exe,Linux 的可执行文件)
存储与加载:程序平时存储在磁盘,执行时加载到内存运行
与源代码区别:程序员常说的 "C 程序" 指源代码文件,与最终二进制执行程序存在编译转换过程
程序在处理器中的执行过程
硬件组成:包含 CPU 核心、执行单元、内存管理单元 (MMU)、总线接口等组件
地址转换:程序使用虚拟地址,由 MMU 转换为物理地址访问实际内存
学习路径:后续课程将通过变量、指针等知识点逐步深入讲解内存管理机制
程序设计语言的发展
机器语言
编码形式:直接使用二进制序列表示的机器指令(如 10010101 等)
历史载体:早期采用纸带打孔方式存储程序(60-70 年代主流)
主要缺陷:
与自然语言差异极大,难以记忆和理解
开发维护工作量大、效率低下
完全依赖特定硬件,无法移植
汇编语言
改进原理:用符号表示机器指令(如 MOV 指令操作寄存器和内存)
相对优势:比机器语言更接近自然语言,降低编程门槛
现存局限:
仍需熟悉硬件架构(如寄存器操作)
平台依赖性极强(x86 与 ARM 汇编不兼容)
嵌入式开发中主要用于阅读和局部修改
高级语言
核心特征:
脱离特定计算机系统(如 BASIC、FORTRAN、C/C++ 等)
单条语句对应多条机器指令
采用类自然语言关键字(if/else/for 等)
发展脉络
:
面向过程(C 语言)→面向对象(C++/Java/C#)
现代趋势:脚本语言(Python/Shell 等)进一步降低开发难度
嵌入式应用:
Linux 内核采用 C 语言编写
智能硬件开发主要使用 C + 汇编的混合编程模式
行业影响:语言门槛降低推动 IT 行业快速发展,催生移动互联网、人工智能等新技术浪潮
程序设计步骤
基本流程:编辑→编译→链接→执行→调试的循环过程(SAASE 模型)
工具链:
编辑工具:VI 编辑器是核心工具,需要频繁使用
编译工具:使用 GCC 编译器进行编译
链接工具:通过 ld 命令完成链接
工作特点:
程序员日常工作就是不断修改代码、调试 bug 的循环
需要保持专注和耐心("踏踏实实,心无旁骛")
调试环节尤为重要,被称为 "bug 终结者" 阶段
注意事项:
VI 编辑器的重要性:在整个开发过程中需要频繁使用
开发过程是迭代式的,需要反复修改和测试
总结
核心内容:
计算机基本结构(冯・诺依曼体系)
程序的定义与本质
存储器的工作原理
程序设计语言发展历程
程序设计完整步骤
课程特点:
基础知识覆盖面广但较零散
为后续编程实践奠定理论基础
重要性:
这些基础知识是理解编程本质的前提
缺乏这些知识会导致 "不理解每天在做什么"
后续预告:
将逐步增加实际编程训练量
重点转向编程、调试、执行等实践环节
知识小结
知识点 | 核心内容 | 考试重点 / 易混淆点 | 难度系数 |
---|---|---|---|
计算机基本结构(冯诺依曼模型) | 计算机硬件构成:输入 / 输出设备、运算器、控制器、存储器(内存 / 外存 / 寄存器);程序控制思想 | 存储器层级关系(寄存器→内存→外存)与功能区分 | ⭐⭐ |
程序定义与本质 | 程序为特定功能设计的操作步骤;实际指二进制可执行文件(如.exe) | 程序源代码≠可执行文件(编译链接过程) | ⭐⭐ |
编程语言发展史 | 机器语言(0101)→汇编语言(符号化)→高级语言(面向过程 / 对象) | 汇编语言平台依赖性(x86 vs ARM)与高级语言抽象层级 | ⭐⭐⭐ |
编程实践步骤 | 编辑→编译→调试循环;工具链(VI 编辑器 / GCC 编译器 /ld 链接器) | 调试环节重要性(Bug 修复占开发主要时间) | ⭐⭐ |
存储系统层级 | CPU 寄存器→内存→外存(硬盘 / Flash);MMU 虚拟地址映射机制 |
数据的表示
计算机数据表示
数据分类:计算机处理的数据分为数值型数据(可算术运算,如数字 )和非数值型数据(不可算术运算,如字母、符号、音视频等 )。
底层原理:所有数据最终都以 0 和 1 的组合形式被计算机处理,包括文字、符号等非数值数据。
数值数据的表示
基数与各数位的权
基数定义:某进制中允许使用的基本数码个数。十进制基数为 10(数码 0 - 9 ),八进制基数为 8(数码 0 - 7 ) 。
位权计算:以基数为底,数字所在位置的序号为指数的整数次幂。例如十进制数中,从右往左数第 n 位(从 0 开始计数 )的位权是 (10^n) 。
二进制
数码组成:仅包含 0 和 1 两种数码,逢 2 进位。
转换示例:二进制转十进制,如 (101_2 = 1×2^2 + 0×2^1 + 1×2^0 = 5_{10}) 。
计数规律:二进制数顺序如 (0, 1, 10, 11, 100\cdots) ,对应十进制 (0, 1, 2, 3, 4\cdots) 。
十六进制
数码组成:包含 0 - 9 和 A - F(A 对应 10 ,F 对应 15 )共 16 种数码,逢 16 进位。
前缀标识:编程中常用
0x
前缀表示十六进制数(如0x1A
)。转换关系:1 个十六进制数码对应 4 位二进制(如
0xF
对应1111
),转换时可直接拆分替换。
八进制
数码组成:包含 0 - 7 共 8 种数码,逢 8 进位(如 7 的下一位是 10 )。
前缀标识:通常以数字
0
开头表示(如012
表示八进制数 )。转换示例:八进制
12
,计算为 (1×8^1 + 2×8^0 = 10_{10}) (十进制 )。二进制关系:1 个八进制数码对应 3 位二进制(如
07
对应111
)。
应用案例
例题:十进制转二进制
转换方法:采用 “除 2 取余,逆序排列” 法。以十进制 25 为例:
25÷2 = 12 余 1 12÷2 = 6 余 0 6÷2 = 3 余 0 3÷2 = 1 余 1 1÷2 = 0 余 1
结果表示:将余数逆序排列得到
11001
。验证计算:(1×2^4 + 1×2^3 + 0×2^2 + 0×2^1 + 1×2^0 = 25) 。
通用规则:该方法同样适用于十进制转八进制、十六进制等其他进制转换。
原码、反码和补码
正数表示:
规则:正数的原码、反码、补码完全相同。
示例:十进制 5 的三种表示均为
101
(8 位表示时为00000101
)。
负数表示(以 8 位二进制表示 -5 为例):
原码:符号位 1 表示负,数值部分与正数相同,示例
10000101
(最高位 1 为符号位,后 7 位0000101
表示 5 )。反码:符号位不变,数值部分按位取反,示例
11111010
。补码:反码加 1 ,示例
11111011
。
符号位规则:最高位为符号位,0 表示正数,1 表示负数。
计算步骤:
写出绝对值的二进制表示(原码)。
符号位置 1(负数)。
数值部分取反(反码)。
最后加 1(补码)。
存储原理:计算机实际存储和运算使用的是补码形式。
非数值数据表示
ASCII 编码
编码标准:美国国家信息交换标准代码 (ASCII) ,将字符转换为二进制编码形式。
编码范围:共 256 个字符(0 - 255 ),对应 1 字节存储空间(8 位 )。
字符类型:包括文字、符号、图像、语言和逻辑信息等非数值数据。
编码分区
控制字符区(00H - 1FH):共 32 个字符,用于通讯或控制,部分字符不可显示(如 NUL、SOH 等控制符 )。
可显示字符区(20H - 7FH):共 96 个字符,包含阿拉伯数字、大小写字母及常见符号,全部可在屏幕上显示。
扩展字符区(80H - FFH):共 128 个字符,由 IBM 制定,包含框线、音标等非标准字符。
编码细节
编码格式:同时显示八进制、十进制、十六进制和对应字符。
特殊字符:
0:NUL(空字符);7:BEL(响铃);9:HT(水平制表);10:LF(换行);13:CR(回车) 。
字符转换原理:每个字符对应唯一整数值(如
'A' = 65
),计算机实际处理的是该数值的二进制形式,转换方法为查表获取十进制值→转换为二进制。存储特性:字符型 (char) 占 1 字节(8 位 ),无符号字符范围:(0 - 255)(计算公式:最大值 (= 2^8 - 1 = 255) )。
'0' 与 0 的区别:字符
'0'
的 ASCII 值为 48(十进制),整数 0 的二进制表示为00000000
;计算机处理时,字符'0'
→ 48 →00110000
。
总结与思考
核心要点:掌握进制转换方法;理解 ASCII 编码原理;区分字符与数值的存储方式。
延伸思考:字符数据通过查表对应整数值表示;字符
'0'
(ASCII 48 )与整数 0 本质不同;不同编码标准(如 Unicode )的区别。
知识小结
知识点 | 核心内容 | 考试重点 / 易混淆点 | 难度系数 |
---|---|---|---|
编程语言学习规律 | 从数据表示与存储入手 → 数据类型 / 变量 → 运算符 / 表达式 → 控制语句 → 函数 / 指针 → 面向对象(类) | 语言共性规律 vs 面向对象特性差异 | ⭐⭐ |
计算机数据分类 | 数值型数据(可算术运算) vs 非数值型数据(字符 / 音视频等) | 二进制存储本质与人类十进制习惯差异 | ⭐⭐ |
进制系统 | 二进制(基数为 2 )、八进制(基数为 8 )、十进制(基数为 10 )、十六进制(基数为 16 ) | 进制转换方法(除基取余法)与权值计算 | ⭐⭐⭐ |
原码 / 反码 / 补码 | 正数三码相同;负数符号位固定(1 表示负),反码取反,补码 +1 | 补码的计算机存储优势(统一加减法) | ⭐⭐⭐⭐ |
ASCII 编码表 | 字符与整数的映射标准(如字符 '0' = 48 ),覆盖 0 - 255 无符号字符范围 |
字符 '0' 与整数 0 的本质区别(ASCII 值 48 vs 数值 0 ) |
⭐⭐ |
进制转换实操 | 十进制 25 转二进制:11001 (通过连续除 2 取余逆序) |
高位补零规则(如 8 位二进制表示) | ⭐⭐⭐ |
非数值数据存储 | 文字 / 符号通过编码标准(如 ASCII )转为二进制处理 | 音视频等复杂数据的非数值特性 |
程序的编译和调试
gcc 编译器
实例操作
基本功能:GCC(GNU Compiler)是 GNU 推出的多平台编译器,可将 C、C++ 源程序编译连接成可执行文件。
支持文件类型:
.c
:C 语言源代码.h
:程序包含的头文件.i
:已预处理过的 C 源代码文件.S
:汇编语言源代码文件.o
:编译后的目标文件
编译语法:
基本格式:
gcc 源文件 -o 输出文件名
,示例gcc hello.c -o hello
。默认输出:不指定
-o
时生成a.out
可执行文件。常用选项:
-c
:只生成目标文件(.o
)而不链接 。-g
:生成调试信息(用于gdb
调试) 。-Wall
:显示所有警告信息 。
执行方法:使用
./可执行文件名
运行程序,如./hello
。文件管理:
mkdir
创建目录;mv
移动文件;rm
删除文件 。调试技巧:修改源代码后必须重新编译才能生效;建议为每个可执行文件指定不同名称,避免默认的
a.out
互相覆盖 。
实战演练
基础编译流程:
使用
vi
编写源代码(test.c
)。编译:
gcc test.c -o test -Wall
。执行:
./test
。
常见错误处理:缺少头文件(如
stdio.h
)会导致警告;语法错误会在编译时显示具体行号;建议始终使用-Wall
选项显示所有警告 。实战案例
(计算 1 + 2 +... + 10 的程序):
源代码:
#include <stdio.h> int main() { int sum = 0; for (int i = 1; i <= 10; i++) { sum += i; } printf("%d\n", sum); return 0; }
编译执行:
gcc test.c -o test -Wall && ./test
。预期输出:
55
。开发效率技巧:
Ctrl + Shift + N
打开新终端窗口;Ctrl + Shift + T
在当前窗口新建标签页;可在不同窗口同时编辑和编译代码 。
程序调试
基础调试宏
预定义宏:
__FILE__
、__LINE__
、__FUNCTION__
是 C 语言头文件中定义好的调试宏,可直接使用 。宏功能
:
__FILE__
:显示当前源文件名(如test.c
)。__FUNCTION__
:显示当前函数名(如main
函数或调用的其他函数 )。__LINE__
:显示当前代码行号 。
应用场景:在代码较长时,可用于日志记录,帮助定位问题发生的具体位置(文件、函数、行号 )。
调试宏使用示例
语法要点:必须使用双下划线(
__
),不是单下划线;宏名称全部大写;正确拼写:__FUNCTION__
(注意包含字母C
) 。常见错误:拼写错误会导致
undeclared identifier
编译错误;参数类型不匹配会触发格式警告(如用%s
输出整型变量 )。调试过程:编译器会明确指出错误位置和类型;需要检查宏拼写和参数对应关系;示例中
m
是整型变量,应与%d
格式符对应 。
实际应用价值
输出示例:
test2.c, main, 9 m=55
表示文件test2.c
、函数main
、行号9
、变量值55
。工程实践:服务器程序中关键操作应记录日志;通过调试宏可精确定位日志来源;避免日志过长成为流水账,增加可读性 。
调试建议:编译错误是正常学习过程;应学会阅读编译器错误提示;小错误(如拼写、格式)可能产生大量错误信息 。
C 语言基础
程序的基本组成
数据描述:程序中需要明确指定数据的类型和组织形式(数据结构),包括线性结构(如数组、链表 )、树形结构、图状结构和集合结构 。
操作描述:即算法,指完成操作的具体步骤,如对数据结构的增删改查等操作流程 。
算法基础概念
定义:为解决特定问题而采取的有序步骤集合,强调步骤的完整性和顺序性 。
实例说明
(判断闰年):
输入年份
year
。判断
year
能否被4
整除 。若能,继续判断能否被
100
整除 。根据条件分支得出最终结论 。
编程思维培养:通过算法训练可提升逻辑严谨性,培养冷静分析问题的能力 。
简单算法实例
阶乘计算原始方法:
步骤分解:
S1)
计算1×2
S2)
结果×3
S3)
结果×4
...
S9)
结果×10
局限性:代码冗长,无法处理大规模数据(如计算
100
的阶乘 )。
循环优化算法:
变量设计:
p
为被乘数(初始值1
);i
为乘数(初始值2
) 。算法流程:
p = 1
i = 2
p = p × i
i = i + 1
若
i ≤ 10
则返回步骤3
优势:通过循环结构简化代码,可轻松扩展计算范围(如改为
1×100
)。
代码实现演示
关键代码:
#include <stdio.h> int main() { int p = 1; for (int i = 2; i <= 10; i++) { p *= i; } printf("%d\n", p); return 0; }
调试技巧:建议复制
test2.c
为test3.c
进行修改测试,使用gcc
编译时可通过-o
指定输出文件名 。
总结
课程要点回顾
工具掌握:
gcc
编译器基本使用方法;使用__FILE__
、__FUNCTION__
、__LINE__
等宏进行基础调试 。核心概念:数据结构与算法的关系;编程逻辑思维的建立方法 。
扩展思考
交叉编译:在
x86
平台开发ARM
程序时,只需将gcc
替换为arm - gcc
交叉编译器,源代码无需修改 。学习建议:通过大量编程实践(建议从
1
加到100
等基础算法开始)快速提升编程能力,建立编程思维 。
知识小结
知识点 | 核心内容 | 考试重点 / 易混淆点 | 难度系数 |
---|---|---|---|
GCC 编译器基础介绍 | GCC 编译器的基本语法(gcc 源文件 -o 可执行文件 )、默认生成 a.out 、警告选项 -Wall |
-o 选项的位置灵活性(可置于中间或末尾) |
⭐⭐ |
编译流程与调试 | 从源代码到可执行文件的完整流程(预处理→编译→汇编→链接 ) | 未重新编译导致执行旧版本(需强调修改后必须重新编译) | ⭐⭐⭐ |
基础调试技巧 | 使用宏 __FILE__ 、__FUNCTION__ 、__LINE__ 打印调试信息,辅助定位日志 |
宏拼写易错(双下划线、大小写敏感) | ⭐⭐ |
算法与数据结构 | 程序 = 数据结构 + 算法;示例:1 到 10 求和(直接累加 vs 循环优化 ) | 循环逻辑的抽象思维(变量累乘 / 累加的实现差异) | ⭐⭐⭐⭐ |
交叉编译概念 | 开发板(ARM)与 PC(x86)的代码移植,需使用 arm - gcc 交叉编译器 |
代码无需修改,仅更换编译器 | ⭐⭐⭐ |
编程思维训练 | 强调逻辑严谨性(如闰年判断的算法步骤)、调试耐心(错误量与代码量无关 ) | 初学者常见误区(逐行硬编码 vs 抽象逻辑实现) | ⭐⭐⭐⭐ |
扩展问题:
介绍一下gcc编译的原理
除了gcc,还有哪些常用的C/C++编译器?
如何在Windows系统中使用命令行工具查看ASCII码表?