C学习笔记【day01】

本文介绍了C++作为编程语言的基础知识,包括就业方向、C语言的影响与发展历史、VS基本操作及内存存储单位等内容,并详细讲解了预处理、编译、汇编和链接等生成程序的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ DAY01

就业方向

前端开发工程师
分为B/S,C/S模式

C/S方向有两个,一个是金融方向客户端,一个是游戏方向客户端


B/S模式和C/S模式区别

B/S不需下载客户端,浏览器就是一个客户端。操作简单,传输数据不方便,系统更新较为容易。

C/S需要独立安装客户段。操作复杂,数据文件保存至本地,传输数据比较少,系统每次升级都需要重新下载资源。


后端开发工程师为主要的就业方向

大数据就业方向目前比较好的三个方向:推荐,广告,搜索,图像处理,AI。


嵌入式开发工程师

需要懂硬件(需要学会数电和模电)

C语言学习

C语言影响力

1.在所有的高级编程语言中,C语言的效率是最高的。C语言可以嵌入汇编代码

2.当今的网络世界就是建立在C语言之上的,例如操作系统(Linux全部是由C语言编写的),高性能服务器Nginx(在服务器段一统天下,完全是由C语言编写),缓存中间件(Redis全部是由C语言写的),网络协议,硬件驱动等。

3.C语言影响力后来大多数的编程语言,C++、Java(C+±-)、C#、GO、Rust

4.TIOBE指数

C语言发展历史

C语言的作者 :Dennish Ritch,Ken Thompson,

1.C语言虽然是一门高级语言,但是对硬件底层要求较高,可以操作底层硬件,而且性能非常高。但是这也有局限性,它不检查数组越界情况,而且没有try_catch机制。

2.C语言和汇编语言有比较强的对应关系。

VS基本操作

LNK0000:像这样的是链接阶段发生错误。(函数名写错了,没有包含对应的头文件,此处只能是C语言环境下出现,C++环境下暂未发现)

bXzdFH.png

error C0000:编译发生错误

bXRp9A.png

调试界面窗口布局

bjdAat.png

调试程序关键步骤:打断点(关键点)

内存存储单位

在计算机内部,信息都是采用二进制的形式进行存储,运算,处理和传输的。信息的存储单位有位,字节和字等几种。

基本存储单元

位(bit):二进制数中的一个数位,可以是0或1,是计算机中数据的最小单位。

字节(Byte,B):计算机中数据的基本单位,每8位组成一个字节。一个ASCII码用一个字节表示,一个汉字用两个字节表示。

字(Word):两个字节称为一个字。汉字的存储单位都是一个字。

扩展存储单位

KB:1KB=210Byte

MB:1MB=210KB

GB:1GB=210MB

在调试程序的过程中,我们可以查看内存地址。

VScode中内存窗口界面是小段表示法进行显示的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fbFf1ete-1648645301390)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314150018828.png)]

小端表示法:低地址存放低有效位

大端表示法:高地址存放低有效位

如何生成程序

从源代码生成可执行程序包含预处理,编译,汇编和链接。

预处理:在主函数执行之前,主要处理源代码文件中以"#"开始的预编译命令。将源码文件*.c和头文件 *.h编译成一个*.i文件。

编译 :将*.i文件进行编译,然后生成一个汇编语言*.s文件。

汇编:将汇编文件*.s转换为二进制的目标代码*.o

链接:将所有的*.o文件链接成一个可执行文件。

下图为广义上的编译:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gdDzO8Ro-1648645301391)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314151659120.png)]

下图为连接:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UkZojOJO-1648645301391)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314151950102.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fIzhbgpK-1648645301392)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314151507919.png)]

预处理过程

预处理指令主要分为宏定义,文件包含,条件编译等

宏定义分为两种,第一种是无参宏定义,其定义的一般形式为:

#define 标识符 字符串

其中,’#'表示一条预处理命令,'define’为宏定义命令,'标识符’为符号常量,即宏名。'字符串’可以是常数,表达式,字符串等。

第二种是带参宏定义,其定义的一般形式为:

#define 宏名(形参表)字符串

注意事项:1.整个宏函数的表达式需要用括号括住。

​ 2.左括号应该紧贴宏函数的名称。

​ 3.带参数的宏在定义的过程时要把每个参数都要添加括号。

​ 4.警惕宏函数导致的多次副作用。

​ 5.定义完备的多语句宏函数。(主要使用do…while循环)

宏定义的原理是简单的文本替换。

文件包含命令行的一般形式为:

#include"文件名"

文件是后缀名为"*.h"的头文件。文件包含命令把指定头文件插入该命令行位置取代该命令行,从而把指定文件和当前源程序文件连接成一个源文件。原理是将对应头文件的内容copy到对应的位置。

带参数的宏定义分行的话,加一个反斜杠

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OsP3xMt8-1648645301392)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314155931621.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ma9bErsx-1648645301393)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314160713059.png)]

宏函数相较于普通函数优点在于以下几个方面:

1.宏函数在预处理阶段时展开,只占用编译时间,函数调用会占用运行时间(分配单元,保存寄存器的值,值传递,保存下一条指令的地址,返回),每次执行都要载入,所以执行相对宏较慢。

2.在函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是简单的字符替换,执行效率较高。

3.函数调用是在程序运行时处理的,分配临时的内存单元;宏展开是在编译时进行的,在展开时不分配内存单元,不进行值传递。

编译

把C语言源代码翻译成汇编代码。godbolt

汇编和链接

汇编将汇编语言翻译成机器语言,生成目标文件。

链接将库函数文件和操作系统的引导代码以及目标文件链接在一起,生成可执行文件。

进程的虚拟内存空间(重点)

进程:进程是程序的基本执行实体,是线程的容器,是正在运行的程序。

​ 进程的虚拟内存空间包含内核,栈,堆,数据段,代码段。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ut1MxTkd-1648645301394)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314163004093.png)]

变量和常量

变量:在程序运行期间可以发生改变的量。变量的本质就是一块内存空间。

思考:

1.如何引用这块内存区域?通过变量名引用。

2.这块内存区域有多大?以及如何解释这片内存区域的数据?通过变量类型

3.这片内存区域表示怎样的数据?通过值的概念进行解释。

变量的三要素:变量名,变量类型,值。

常量:在程序的执行期间不可以发生改变的量。

常量表达式:在编译期间可以直接求值的表达式。(constexpr)

常量和常量表达式之间的区别?

常量表达式可以用于指定数组的长度,还可以用于switch语句的标签

标识符和关键字

标识符(identifer):为变量,宏,函数等起的名字。

关键字:对C语言有特殊意义的名称,称为关键字。

规则:1.标识符中只能包含字母,数字和下划线

​ 2.不能以数字开头

规范:单词与单词之间以下划线分割。驼峰。好的标识符,见名知义

注意事项:1.标识符是区分大小写的

​ 2.标识符与关键字不能冲突。

格式化输入和输出

计算机包含哪几个部分

冯·诺伊曼体系结构(存储程序型计算机):输入设备,运算器,存储器,控制器,输出设备

最简单的计算机包含:输入设备、运算器、输出设备

输入和输出模型(重点)

核心矛盾:CPU,内存,I/O设备在处理数据时存在速度差异

比喻:CPU一天,内存一年(10**2);内存一天,I/O十年(10**3)

cpu,内存:高速缓存(cache)

内存,I/O设备:缓冲区(buffer),缓存(Radis)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Yp3q9fi-1648645301395)(C:\Users\leo\AppData\Roaming\Typora\typora-user-images\image-20220314174322640.png)]

体系结构(存储程序型计算机):输入设备,运算器,存储器,控制器,输出设备

最简单的计算机包含:输入设备、运算器、输出设备

输入和输出模型(重点)

核心矛盾:CPU,内存,I/O设备在处理数据时存在速度差异

比喻:CPU一天,内存一年(10**2);内存一天,I/O十年(10**3)

cpu,内存:高速缓存(cache)

内存,I/O设备:缓冲区(buffer),缓存(Radis)

[外链图片转存中…(img-6Yp3q9fi-1648645301395)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值