10天学会嵌入式技术之c语言-day-1
手把手入行嵌入式之10天学会C语言day-1
第一章 C语言概述
目录
1.1什么是程序
程序是一组按照特定顺序执行的指令集合,用来完成特定任务或解决特定问题的一种计算机执行逻辑。程序可以用各种编程语言编写,然后通过编译或解释器来将其转换为计算机可执行的形式。程序可以包括各种操作和算法,用于处理数据、控制计算机硬件等。在计算机科学中,程序是实现算法的具体表现形式,是实现特定功能的关键组成部分。
1.2计算机语言简史
1.2.1机器语言
1946 年 2 月 14 日,世界上第一台计算机 ENIAC 诞生,使用的是最原始的穿孔卡片。
这种卡片上使用的是用二进制代码表示的语言,与人类语言差别极大,这种语言就称为机器
语言。
1.2.2汇编语言
用英文缩写的助记符来表示基本的操作,这些助记符构成了汇编语言的基础,比如:
LOAD、MOVE 等,使人更容易使用,因此,汇编语言也称为符号语言。
优点:能编写高效率的程序。
缺点:汇编语言是面向机器的,不同计算机会有不同的汇编语言,程序不易移植。
目前仍然应用于工业电子编程领域、软件的加密解密、计算机病毒分析等。
1.2.3高级语言
高级语言,是一种接近于人类使用习惯的程序设计语言,它允许程序员使用接近日常英
语的指令来编写程序,程序中的符号和算式也与日常用的数学算式差不多,接近于自然语言和数学语言,容易为人们掌握。
高级语言独立于计算机硬件,有一定的通用性;计算机不能直接识别和执行用高级语言
编写的程序,需要使用编译器或者解释器,转换为机器语言才能被识别和执行。
常见的高级语言有 Fortran、ALGOL、Basic、COBOL、LISP、Pascal、PROLOG、C、
C++、VB、Delphi、Java、PHP、JavaScript、Python 等。
1.3 为什么要学习C语言

C 语言是最流行的编程语言之一,下图是 2025年3月编程语言排名,排名网站网址为:编程语言排名 - HelloGitHub
1.4 C语言发展历程

1.5 C语言发行版本
(1)K&R C(1978 年): 由柯尼汉和里奇合写的《C 程序设计语言》成为公认标准,
简称为 K&R C。
(2)ANSI C(C89/C90,1989 年): 第一个 ISO 标准,也叫 ANSI C,规范了 K&R
C,确保了可移植性。
(3)C99(1999 年): 第一次大修订,引入许多特性如//注释、可变长度数组等,成
为最流行版本。
(4)C11(2011 年): 再次修订,增加_Generic、static_assert 等功能,跟进新技术。
(5)C17(2018 年): C11 在 2017 年修补,2018 年发布的 C17 只解决了 C11 的缺陷,加入新功能。
(6)C23(2023 年): 2023 年发布的 C23 计划增强安全性、消除实现定义行为、
引入模块化语言等,提升安全和可靠性。
1.6 C语言应用场景

第二章 c程序开发快速入门
2.1 开发工具选择
(1)Visual Studio 工具
Visual Studio(简称 VS)是由微软公司发布的集成开发环境,它包括了整个软件生命
周期中所需要的大部分工具,如 UML 工具、代码管控工具、集成开发环境(IDE)等。
官网地址:https://visualstudio.microsoft.com
(2)Code::Block 工具
Code::Block 是一个免费的跨平台 IDE,它支持 C、C++和 Fortan 程序的开发,Code::Block
的最大特点是它支持通过插件的方式对 IDE 自身功能进行扩展,这使得 Code::Block 具有很
强的灵活性,方便用户使用。
官网地址:https://www.codeblocks.org
(3)Clion 工具
CLion 是一款由 JetBrains 推出的跨平台 C/C++集成开发环境(IDE),它具有智能编辑器、CMake 构建支持、调试器、单元测试、代码分析等功能,可以极大提高 C/C++开发效率。
官网地址:https://www.jetbrains.com/clion
(4)VS Code
Visual Studio Code(简称 VS Code)是一款由 Microsoft 开发的免费、开源的代码编辑
器,它是一种轻量级但功能强大的集成开发环境(IDE),VS Code 旨在提供一种优秀的编
码体验,适用于各种编程语言和应用程序开发任务。
官网地址:https://code.visualstudio.com
VS Code 用户界面友好、上手快、安装简单,插件丰富,所以本教程选择 VS Code 作为默认的开发工具。
(5)在线编辑工具
CodingGround: https://tutorialspoint.com/compile_c_online.php
OnlineGDB:https://onlinegdb.com/online_c_compiler
Lightly:https://cde2f3ce.lightly.teamcode.com/
2.2 开发工具安装
2.2.1 安装VSCode
(1)下载安装包
资料文件夹中的“VSCodeUserSetup-x64-1.83.1.exe”即是 VS Code 安装包,也可以从
VS Code 官网 https://code.visualstudio.com 下载最新版本的 VS Code。
2.2.2 配置VS Code
(1)安装中文语言包
安装中文语言包扩展,Chinese(Simplified)(简体中文)Language Pack for Visual Studio
Code,点击扩展按钮,从搜索框搜索“chinese”,第一个就是我们要安装的扩展。
扩展安装完成后需要重启 VS Code,正常情况下会弹出重启按钮,点击即可重启,如果
没有弹出,可自行重启 VS Code。
(2)安装 C 语言扩展
点击最左侧“扩展”按钮,搜索“C/C++”,选择“C/C++ Extension Pack”,它是 VS
Code 官方推荐的工具包,包含了开发 C/C++ 所需要的多个扩展。
2.3年轻人的第一个c程序
2.3.1 需求说明
要求开发一个程序,输出“hello,world!”。
2.3.2 开发步骤
#include<stdio.h>
int main()
{
printf("hello,world!");
return 0;
}
2.3.3 程序代码分析

2.4 c程序运行机制流程

(1)编写
编写 C 语言源程序代码,并以文件的形式存储到磁盘中,源代码文件以“.c”作为扩展
名,如本项目中 main.c 文件。
(2)预处理
在编译之前,预处理器会处理源代码文件,主要进行一些文本上的处理,包括去掉多余的空格和注释,处理预处理指令(后面会学到),生成经过处理的源代码文件,通常带有.i
扩展名。
(3)编译
编译器接受预处理后的源代码文件,并将其翻译成汇编代码,生成汇编文件,通常带有.s
或.asm 扩展名。
(4)汇编
汇编器将汇编代码翻译成机器码并生成一个或多个目标文件,目标文件是二进制文件,
通常带有.o(在 Unix-like 系统上)或.obj(在 Windows 上) (5)链接
链接器将多个目标文件(如果有的话)合并在一起,包括 C 标准库文件和其他库文件,
生成最终的可执行的二进制程序(.exe 程序)。
库文件是由系统提供,里面包括内置的标准函数和数据结构集合等,我们代码中使用的
<stdio.h> 就是标准库提供的,里面定义 printf 这个函数。
(6)运行
执行该.exe 文件得到程序的运行结果。
2.5 c程序开发注意事项
(1)C 程序源文件以"c"为扩展名。
(2)C 程序的执行入口是 main() 函数。
(3)C 语言严格区分大小写。
(4)C 程序由一条条语句构成,每个语句以 ";" 结束。
2.6 注释
2.6.1 什么是注释
编程语言中,注释是一种特殊的文本,它不会被编译器执行,而仅用于代码的解释和文档说明。
2.6.2 注释的作用
(1)对代码进行解释说明,帮助其他开发者理解代码的意图、功能和逻辑。
(2)注释掉暂时不想执行的代码,在代码调试中经常用到。
2.6.3 单行注释
//注释单行
2.6.4 多行注释
/*注释内容*/
/*
注释内容
*/
2.7 输出内容
使用 printf() 输出内容到终端,要输出的内容需要用双引号包裹,如果需要换行可以使
用 “\n”。
#include<stdio.h>
int main()
{
printf("holle world\n" );
printf("welcom beijin\n");
printf("3.14159265\n");
printf("窗前明月光,疑是地上霜。\n");
return 0;
}
2.8 代码块风格

第三章 变量
3.1 为什么需要变量
一花一世界,如果把一个程序看做一个世界或一个社会的话,那么变量就是程序世界的
花花草草、万事万物,即,变量是程序中不可或缺的组成单位,最基本的存储单元。
3.2 变量的概念
(1)变量是内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化。
(2)通过变量名,可以引用这块内存区域,获取里面存储的值。 (3)变量的构成包含三个要素:数据类型、变量名、存储的值。 3
3.3 变量的声明和使用
(1)变量必须先声明,后使用。
(2)可以先声明变量再赋值,也可以在声明变量的同时进行赋值。
(3)变量的值可以在同一类型范围内不断变化。
示例:
#include<stdio.h>
int main()
{
int a;//声明一个变量,取名为a
a = 100;//对变量a进行赋值
int b;//声明一个变量,取名为b
b = 200;//对变量a进行赋值
b = a;//修改b的值,将a的值赋给b
int c1 = 10, c2 = 20, c3 = 30;
//同时声明多个整型变量并且赋值
return 0;
}
3.4输出变量
printf 的标准含义是格式化输出文本,printf 的名称来源于 "print formatted"(格式化打
印)的缩写,标准语法规则如下:

1)格式化字符串是用双引号括起来的一个字符串,里面包括格式占位符和普通字符。
(2)格式占位符,也叫格式声明符,由“%”和格式字符组成,作用是将输出的数据转为指定的格式后输出,这里“%d”表示整数,更多的格式占位符后续会进行讲解。
(3)输出列表是程序需要输出的一些数据,可以是常量、变量或表达式,与格式占位符一一对应。
示例:
#include<stdio.h>
int main()
{
int a;//声明一个整型变量,取名为a
a = 100;//对变量a进行赋值
int b;//声明一个整型变量,取名为b
b = 200;//对变量a进行赋值
printf("a=%d\n", a);
printf("b=%d\n", b);
//使用输出语句,把变量a,b的值输出,%d表示的形式为整型数据。
int c1 = 10, c2 = 20, c3 = 30;//同时声明多个变量并赋值
printf("%d %d %d \n", c1, c2, c3);
return 0;
}
输出结果:
a=100
b=200
10 20 30D:\c-code\3-13\x64\Debug\3-13.exe (进程 11616)已退出,代码为 0 (0x0)。
按任意键关闭此窗口. . .
3.5输入数据赋值给变量
canf 主要用于从标准输入(通常是键盘)读取数据并将其存储到指定的变量中(变量需要提前声明),同 printf 一样,位于头文件 <stdio.h> 中。

示例:
#include <stdio.h>
int main()
{
int num;
printf("Please Input A Number: ");
scanf("%d", &num); // 从标准输入读取整数,并将其存储到变量 num 中
printf("Your Number Is: %d\n", num);
int num1, num2, num3;
printf("PLeaase Input Three Number: ");
scanf("%d %d %d", &num1, &num2, &num3); /* 从标准输入读取 3 个整数,使
用空格分隔,并将分别将其存储到变量 num1、num2、num31 中*/
printf("Numbers: %d, %d, %d", num1, num2, num3);
return 0;
}
需要注意的是,scanf 中,变量名前面需要添加 & 符号,该符号称为取地址符,我们
会在指针部分详细讲解。
与 printf 相同,scanf 也可以通过不同格式占位符为不同类型的变量获取值。
3.6 标识符
C 语言中变量、函数、数组名、结构体等要素命名时使用的字符序列,称为标识符。
3.6.1 标识符命名规则
1.强制规范
(1)只能由小写或大写英文字母,0-9 或 _ 组成。
(2)不能以数字开头。
(3)不可以是关键字。 (4)标识符具有长度限制,不同编译器和平台会有所不同,一般限制在 63 个字符内。
(5)严格区分大小写字母。比如:Hello、hello 是不同的标识符。
合法的标识符举例:
a 、 BOOK_sun 、 MAX_SIZE 、 Mouse 、 student23 、 Football 、 FOOTBALL 、 max ,
_add、num_1、sum_of_numbers
非法的标识符举例:
$zj、3sum、ab#cd、23student、Foot-baii、s.com、b&c、j**p、book-1、
)建议规范
(1)为了提高阅读性,使用有意义的单词,见名知意,如:sum,name,max,year 等。
(2)使用下划线连接多个单词组成的标识符,如:max_classes_per_student。
(3)多个单词组成的标识符,除了使用下划线连接,也可以使用小驼峰命名法,除第一个单词外,后续单词的首字母大写,如 myVariableName、maxClassesPerStudent。
(4)不要出现仅靠大小写区分不同的标识符,如:name、Name 容易混淆。
(5)系统内部使用了一些下划线开头的标识符,比如,C99 标准添加的类型 `_Bool`,为防止冲突,建议开发者尽量避免使用下划线开头的标识符。
3.6.2 关键字
键字是一些具有特殊含义的保留单词。

C99 标准增加了 5 个关键字:inline、restrict、_Bool、_Complex 和_Imaginary。
C11 标准增加了 7 个关键字:_Alignas、_Alignof、_Atomic、_Static_assert、_Noreturn、
_Thread_local 和_Generic。
3.7 案例
定义两个整数变量,获取用户输入作为它们的值,计算它们的和并输出。
//两个整数变量,获取用户输入作为它们的值,计算它们的和并输出。
#include<stdio.h>//定义主函数
int main()
{
int a, b, sum;//定义a,b,sum三个整型变量
printf("please input two number:");
scanf("%d %d", &a, &b);//获取用户输出数据
sum = a + b;//计算两数之和
printf("两数之和为:%d", sum);
return 0;
}
第四章 常量
4.1什么是常量
程序运行时,其值不能改变的量,即为常量。
4.2常量的分类
1)字面量常量,直接使用的常量,不需要定义或声明,包括整数常量、浮点数常量、
字符常量。
(2)标识符常量,使用标识符作为常量名,包括 #define 定义的标识符常量和 const键字定义的标识符常量以及枚举常量。
4.3常量的定义
面常量不需要定义或声明,我们主要学习如何定义标识符常量,习惯上常量名使用大写,方便与变量区分。
4.3.1 使用#defin定义常量
(1)介绍
#define 来定义常量,也叫作宏定义,就是用一个标识符来表示一个常量值,如果在后
面的代码中出现了该标识符,那么编译时就全部替换成指定的常量值,即用宏体替换所有宏名,称宏替换。
(2)#define定义常量的格式
#define 常量名 常量值
注意:
(1)不要以分号结尾,如有分号,分号会成为常量值的一部分。
(2)#define 必须写在 main 函数的外面(有些编译器的扩展允许 #define 写在 main
函数里,但我们强烈不建议这么做)。
案例:
#include<stdio.h>
#define pi 3.14//定义一个常量pi,常量值3.14
int main()
{
double area;
double r = 1.2;
area = pi*r*r;
printf("%.2f", area);
return 0;
}
4.52
D:\c-code\3-13\x64\Debug\3-13.exe (进程 24236)已退出,代码为 0 (0x0)。
按任意键关闭此窗口. . .
4.3.2 const 关键字
(1)介绍
C99 标准新增,这种方式跟定义一个变量是一样的,只需要在变量的数据类型前再加上
一个 const 关键字。
跟使用 #define 定义宏常量相比,const 定义的常量有详细的数据类型,而且会在编译
阶段进行安全检查,在运行时才完成替换,所以会更加安全和方便。
(2)const 定义常量的格式
const 数据类型 常量名=常量值;
案例:
#include<stdio.h>
const double pi = 3.14;//const 定义常量时,需要加分号。
int main()
{
double area;
double r = 1.2;
area = pi*r*r;
printf("%.2f", area);
return 0;
}

4.3.3#define定义常量和#cons定义常量的区别
(1)执行时机:#define 是预处理指令,在编译之前执行;const 是关键字,在编译过
程中执行。
(2)类型检查:#define 定义常量不用指定类型,不进行类型检查,只是简单地文本替
换;const 定义常量需指定数据类型,会进行类型检查,类型安全性更强。
每日一测-day-1
1. 【选择题】下面哪个是合法的 C 语言标识符?
A. 123var
B. my-variable
C. _myVar
D. $number
【答案】
C
【解析】
合法标识符必须以字母或下划线开头,后续可以包含字母、数字和下划线。选项 C"_myVar" 符合这个规则,而其他选项不符合。
2. 【选择题】下面哪个是单行注释的正确语法?
A. // 这是一个单行注释
B. /* 这是一个单行注释 */
C. ''' 这是一个单行注释 '''
D. # 这是一个单行注释
【答案】
A
【解析】
C 语言中,单行注释使用"// 注释内容"的格式,选项 A 是正确的单行注释语法,选项
B 是多行注释的写法。其他选项是其他语言中的注释方式。
3. 【选择题】下面哪种方式可以正确输出整数变量 x 的值?
A. printf("The value of x is: %s", x);
B. print("The value of x is: %d", x);
C. printf("The value of x is: %d", x);
D. print("The value of x is: %s", x);
【答案】 C
【解析】 输出变量的正确方式是使用 printf 函数,使用%d 格式说明符,选项 C 中的语句是正确的。
4. 【填空题】请补全程序的运行机制流程
编写代码 --> 预处理 --> ()-->()--> 链接 --> 运行
【答案】 编译、汇编
【解析】
C 程序的运行机制流程可以大致分为以下步骤:
(1)编写
编写 C 语言源程序代码,并以文件的形式存储到磁盘中,源代码文件以“.c”作为扩
展名。
(2)预处理
在编译之前,预处理器会处理源代码文件,主要进行一些文本上的处理,包括去掉多
余的空格和注释,处理预处理指令(后面会学到),生成经过处理的源代码文件。
(3)编译
编译器接受预处理后的源代码文件,并将其翻译成汇编代码,生成汇编文件。
(4)汇编
汇编器将汇编代码翻译成机器码并生成一个或多个目标文件,目标文件是二进制文件。 (5)链接
链接器将多个目标文件(如果有的话)合并在一起,包括 C 标准库文件和其他库文
件,生成最终的可执行的二进制程序(.exe 程序)。
(6)运行
执行该.exe 文件得到程序的运行结果
.5 【代码题】请写出以下代码的运行结果
#include <stdio.h>
const int PI = 300;
int main()
{
PI = 250;
printf("%d", PI);
}
【答案】 报错
【解析】
常量的值不能修改!
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)