嵌入式C语言基础入门
决定程序员的薪资的是:单位时间内有效代码的产出量
目录
1. Linux入门操作指令
1.1 文件系统结构
1.2 常用操作指令
1.2.1 pwd
1.2.2 man
1.2.3 ls
1.2.4 Ctrl + Shift + t
1.2.5 ctrl+l
1.2.6 查看文件内容
1.2.7 vi
1.2.8 cp
1.2.9 mv
1.2.10 touch
1.2.11 rm
1.2.12 mkdir
2 vi 编辑器
2.1 概述
2.2 三种模式
2.3 拷贝与粘贴命令
2.4 保存和退出命令
2.5 vi 光标命令
2.6 查找命令
2.7 替换命令
2.8 复制与剪切命令(非整行)
2.9 显示编辑器当前状态
3. gcc 编译器
3.1 概述
3.2 编译流程
4. 数据类型
4.1 基本数据类型
3.1.1 bool
3.1.2 char
5. 存储类型
5.1 auto
5.2 register
5.3 static 变量
5.4 extern 变量
嵌入式开发需要使用 Llinux 系统 进行相关操作
而 C语言是嵌入式开发的第一语言
因此,C语言在开始学习时最好在 Linux 下编译
所以这里只简单介绍在Llinux系统下进行C语言学习使用到的简单命令
1. Linux入门操作指令
1.1 文件系统结构
Linux 文件系统就是一个树形的分层组织结构(树状目录结构)
/bin: Binaries (二进制文件) 的缩写, 存放着最经常使用的命令。
/dev :Device(设备) 的缩写, 存放 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
/etc:Etcetera(等等) 的缩写,存放所有的系统管理所需要的配置文件和子目录。
/home:普通用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
... ...
1.2 常用操作指令
1.2.1 pwd
pwd:显示用户在文件系统中的当前位置
打开命令终端窗口,用户就处在自己的用户主目录的位置
1.2.2 man
man 命令:命令的帮助(使用)
1.2.3 ls
ls [ Option(选项) ] [ files_or_dirs(目录) ]:
ls:显示当前目录内容
ls -a:显示隐藏文件
ls -l :显示详细信息
补充:- :无权限
ls -r:显示层级目录
1.2.4 Ctrl + Shift + t
新建窗口:Ctrl + Shift + t
1.2.5 ctrl+l
清屏:Ctrl + l
1.2.6 查看文件内容
查看文件内容:cat / nl / tail / tail
(1)cat 文件:查看文件
cat -s 文件:多个空行删减(合并)为一个空行
cat -b 文件:显示行号
(2)nl 文件:查看文件并显示行号
(3)head 文件:查看文件内容前十行
head - n 文件:查看文件内容前 n 行
tail 文件:查看文件内容后十行
tail - n 文件:查看文件内容后 n 行
1.2.7 vi
编写文件内容:vi 文件名
若不存在该文件,则默认创建
1.2.8 cp
复制文件:cp 文件1 文件2 / 路径
将文件1复制到同层目录下并命名为 文件2 / 复制到某路径中
复制文件夹:cp -r 文件夹1 文件夹2
1.2.9 mv
移动文件:mv 文件 位置
将文件移动到该位置
mv 文件 位置 / 文件:移动并重命名
1.2.10 touch
创建文件:touch - 文件(未存在的)
修改时间戳:touch 文件(已存在的)
1.2.11 rm
删除文件:rm - i 文件
- i :会添加交互
删文件夹:rm - r 文件夹
1.2.12 mkdir
创建文件夹:mkdir 文件夹名
mkdir -p 文件夹名:级联创建文件夹
2 vi 编辑器
2.1 概述
vi 是Linux 中最基本的编辑器
而编写 C语言源代码需要在编辑器中进行
编写文件:vi 文件名
但是此操作之后还是无法编辑文件
2.2 三种模式
这涉及到 vi 的三种模式:命令行模式,插入模式,底行模式
vi 文件名 进入的是命令行模式
命令行模式进入到插入模式( insert ):
i:进入编辑状态,光标不发生移动
I(大写):进入编辑状态,光标置于该行行首(行首转插入)
a:进入编辑状态,光标向后移动一位
A:进入编辑状态,光标置于该行行尾(行尾转插入)
o:进入编辑状态,原光标下插入新的一行,光标置于新行行首
O:进入编辑状态,原光标上插入新的一行,光标置于新行行首
底行模式:进行文件的保存,查找,替换,列出行号等(指令前有冒号)
执行以下操作前须要切换回插入模式:Esc
保存::w ,类似于window 系统下的 ctrl + s
保存并退出::wq
2.3 拷贝与粘贴命令
只能在命令行模式进行代码的复制,粘贴操作
复制:yy(yank),默认复制该行
n yy :复制 n 行
粘贴:p / P (pute)
p:光标所在行的下一行进行粘贴
P:光标所在行的上一行进行粘贴
剪切:dd(delete),类似于 CTRL + X
n dd :剪切 n 行
撤回上一步:u(undo)
按照字符删除:x
n x:一次删除 n 个字符
2.4 保存和退出命令
只能在底行模式进行代码的保存与退出操作
:q:退出没有修改的文件,一般不单独使用;若文件被修改没有保存,此命令无效
常与 :wq(保存并退出) 搭配使用
:q!:强制退出,且不保存修改过的文件,常用于修改后不满意不保存的情况
:w File:另存为 File 给出的文件名,不退出,源文件不会被覆盖
2.5 vi 光标命令
k:上移
j:下移
h:左移
l:右移
:set nu:设置行号
:set nonu:取消显示行号
1 G:移动光标到文件第一行
G:移动光标到文件最后一行
:N:移动光标到第 N 行
2.6 查找命令
/字符串:查找字符串,类似于 ctrl + f 的功能
n:继续向下查找
N:继续向上查找
2.7 替换命令
利用 :s 可以实现字符串的替换
:表示底行模式输入的指令
s:表示替换
.,$ :表示替换范围为当前行到最后一行
1,$:表示替换范围为第一行到最后一行
%:表示替换范围为全文
:s/str1/str2:将当前行(默认为当前行)的第一个 str1 替换为 str2
:s/str1/str2/g:在当前行(s默认为当前行)范围中将所有的 str1 替换为 str2
:%s/str1/str2/g:在全文范围中将 str1 全部替换为 str2
2.8 复制与剪切命令(非整行)
y0:将光标至行首的字符拷入剪贴板
y$:将光标至行尾的字符拷入剪贴板
d0:将光标至行首的字符剪切入剪贴板
d$:将光标至行尾的字符剪切入剪贴板
:n1,n2 y:块复制
:n1,n2 d:块剪切
2.9 显示编辑器当前状态
进入 vi 编辑器:vi 文件名
输入: :set showmode
3. gcc 编译器
3.1 概述
GNU 推出的多平台编译器(前面介绍的是 vi 编辑器)
可将 C,C++ 源程序编译成可执行文件
支持以下后缀:
.c C语言源程序
.h 程序包含的头文件
.i 已经预处理过的 C 源代码文件
.s 汇编语言源代码文件
.o 编译后的目标文件
3.2 编译流程
gcc -o 文件名.c 文件名
- o 输出可执行文件
- e 输出预处理文件
- c 只要求编译器输出目标代码
- g 用于调试
./文件名 查看输出结果
此外,代码在编译调试过程中需要重新生成执行文件
4. 数据类型
4.1 基本数据类型
3.1.1 bool
bool 不是基本数据类型,使用时需借助头文件 #include <stdbool.h>;
若不借助头文件,须声明为 _Bool
3.1.2 char
其他数据类型本人觉得无需介绍,故省略;
5. 存储类型
声明变量时,需要遵循以下规则:
存储类型 变量类型 变量名 ;
5.1 auto
缺省的参数类型就是 auto
进入代码块(block)系统为变量自动分配内存
当退出块时,系统释放分配给自动变量的内存
重新进入块,系统会为自动变量再次分配内存,原先的值已经没有了
5.2 register
将变量直接放入 CPU 的寄存器中,而非内存
可以加快程序的运行速度
但这样变量就没有地址,无法使用其指针
此外,寄存器的个数与容量是有限制的
所以并不是所有数据类型都可以直接放进去
5.3 static 变量
静态存储类型的变量,默认值为 0
在内存地址中以固定地址存放,而非堆栈
这样,只要程序没有结束,在内存中就不会被销毁
可以声明在函数体内或函数体外
5.4 extern 变量
extern 称为外部参照引用型
extern 修饰的变量在其他文件中的函数或程序段都可以被引用
注意:static 修饰 extern 存储类型的变量,该变量就不能被其他文件使用,即 extern 失效;