[嵌入式专栏](系列一 、C++语言详解)

文章目录

    • 1 . 概要
    • 2 . C++关键字
    • 3 . C++语言运算符优先级
    • 4 . 本质理解
      • 4.1 内存
      • 4.2 语法
    • 5 . 语法应用
      • 5.1 示例
      • 5.2 指针
      • 5.3 结构体
      • 5.4 类
    • 6 . 编译过程
      • 6.1 预处理
      • 6.2 编译
      • 6.3 汇编
      • 6.4 链接
    • 7 . 小结


【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485


1 . 概要

  • 深入浅出C++语言,以下内容简洁,适合入门与加深理解

2 . C++关键字

asmdoifreturntypedef
autodoubleinlineshorttypeid
booldynamic_castintsignedtypename
breakelselongsizeofunion
caseenummutablestaticunsigned
catchexplicitnamespacestatic_castusing
charexportnewstructvirtual
classexternoperatorswitchvoid
constfalseprivatetemplatevolatile
const_castfloatprotectedthiswchar_t
continueforpublicthrowwhile
defaultfriendregistertrue
deletegotoreinterpret_casttry

3 . C++语言运算符优先级

在这里插入图片描述

4 . 本质理解

首先要明白,我们为什么要学C++语言,作者当初学C++语言是为了Qt, 如果和我一样是嵌入式方向,则接下来看这篇文章的贴合度将达到100%,好了,废话不多说,直入正题。

4.1 内存

学C语言先不要管语法, 先让内存概念深入人心, 什么是内存 ?
这里举个“栗子”,地球上有70多亿人,每个人都属于大自然,我们从大自然中诞生,亦从大自然回归,每个人都属于大自然中的“内存”,我们最终回归大自然(相当于内存释放),而我们学习C++语言,就能成为一个领域的世间主宰,掌控“亿万”内存,想必看到这里,大家对内存已经有了独特的认识。

4.2 语法

前面提到了主宰者,那身为主宰者怎么掌控这些内存 ?
没有功法加持,就很难灵活调用,岂不荒废了这一身牛逼的功力,所以有前辈创出了这顶级功法“C++”!里面通过技能(语法)来操控世间万物(内存)。

5 . 语法应用

5.1 示例

int main(int argc, char *argv[]) {u8 i = 1;if (i == 1) {i = 2;}return 0;
}

语法极其简洁,可能有读者不太了解 “ int argc,char *argv[] ”:这里的内容意义,由于C++语言是面向过程,系统级,当系统调用一个程序时,可以执行初期给定输入数据,其中前者是数据数量,后者是具体数据

5.2 指针

接下来我们直接看指针,部分人群看到指针语法以及应用有些许畏惧,不要畏惧!我们可以把指针玩弄于股掌之中,然后为什么C语言要设计出指针,是为了内存交互便利,从时间和空间上考虑

int main(int argc,char* argv[]) {u8 *p = null;u8 i = 1;p = &i;*P = 2;if (i == 1) {i = 2;}return 0;}

指针语法也是极其简洁,相比上个示例也多了 &和* ,这里的&取地址,*取值,为什么要取地址,又为什么要取值,所有应用按上个示例那样操控变量不香吗,是的,不香,因为我们从时间和空间上考虑才能更好的晋升大道,例如我灵魂可以出窍到别人身上,那么我可以随意操控全部人怎么做一件事,而不需要我再口述和对方沟通怎么做,效率大大提高。


5.3 结构体

typedef struct {u8 i;
}T_str;T_str T;int main(int argc,char* argv[]) {u8 i = 1;if (i == T.i) {i = 2;}return 0;
}

这里抛出结构体,为什么C语言要设计这些奇形怪状的东西,直接全部 u8 数组不好吗,不好,因为一旦我们工程庞大,数据内存段定义分布,就不好管理了,为了更好掌控万物,我们一般高内聚,就像人的体内有N个细胞组成在一起

数组与结构体的差异在于,数组的连续段数据类型是相同的,而结构体可以不同数据类型组成连续段内存

typedef struct {u8 i;
}T_str;T_str T;int main(int argc,char* argv[]) {u8 *p = null;u8 i = 1;p = (u8 *)&T;*p = 2;return 0;
}

指针可以指向万物,那当然也可以指向结构体,指针无所不能。

5.4 类

class File : public QObject
{public :int i; private :int j;};

声明了类,就可以用类进行new对象了

File *file = new File();

new完后,会执行类的构造函数,如果类里面没有声明构造函数,会执行默认构造函数

6 . 编译过程

6.1 预处理

#define macro 1
void func() {u8 x = macro;
}	

预处理阶段时把宏macro替换为1

6.2 编译

u8 x = macro;
MOVS r0, #0x01

编译阶段把C++语言转换成汇编内容

6.3 汇编

MOVS R0, #0x01
0x2001

汇编阶段把汇编指令根据当前平台转换成机器码

6.4 链接

程序中N条汇编机器码需要整合在一起,此时把这些机器码链接在一块输出最终可执行文件

7 . 小结

学习C++语言,有疑惑可以直接用Qt来验证程序,学语法的同时学框架,如果中途学习感觉到困惑有阻碍,不必忧心,放宽心态,多看多写,自然而然就明白了其中的逻辑,另外不必刻意背语法,写着写着自然就记住了,印象模糊时可来回顾一遍,看到这里,相信大家基本入门了。

如果喜欢,请关注一波,后续持续更新嵌入式实用内容,谢谢大家
技术交流群 : 745662457
群内专注问题答疑,项目外包,技术研究

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/315280.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle-深入了解cache buffer chain

文章目录 1.Cache buffer chain介绍2.Buffer cache的工作原理3 Buffer chains4.Multi-versioning of Buffers5.Latches6.诊断CBC latch等待7.解决 CBC Latch等待 1.Cache buffer chain介绍 经常看到会话等待事件“latch:cache buffers chain”。 如果想知道意味着什…

PDFMiner,一个神奇的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个神奇的 Python 库 - pdfminer。 Github地址:https://github.com/euske/pdfminer 在数字化时代,PDF(Portable Document Format&#xf…

王力机器人安全门|用细节开拓高端精致家居生活

细微之处见风范,毫厘之优定乾坤。在追求高端品质的道路上,细节往往是最有力的诠释。如在入户门的选择方面,考虑到老人、孩子、宠物等每一位家庭成员不同需求的设计、科技运用才称得上是充满人性化、品质化的高端细节,幸福感直抵心灵。在该方面,王力机器人安全门做出了表率,每一…

网络总是宕机,这个绝招必须收藏!

下午好,我的网工朋友。 众所周知,后台服务可以划分为两类,有状态和无状态。 高可用对于无状态的应用来说是比较简单的,无状态的应用,只需要通过 F5 或者任何代理的方式就可以很好的解决。 而本篇文章描述的主要是针…

uni-app 前后端调用实例 基于Springboot 数据列表显示实现

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

Python从入门到精通专栏总结,下一步规划

Python从入门到精通专栏:http://t.csdnimg.cn/4Lals 时光飞逝,转眼间我们的Python从入门到精通专栏已经接近尾声。 在这里,向大家表示最诚挚的感谢。感谢你们一直以来对Python学习的热情,以及对本专栏的持续关注和支持。 回顾过去…

经典卷积神经网络-VGGNet

经典卷积神经网络-VGGNet 一、背景介绍 VGG是Oxford的Visual Geometry Group的组提出的。该网络是在ILSVRC 2014上的相关工作,主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG有两种结构,分别是VGG16和VGG19,两者并…

(node-red)pm2的日志管理及使用pm2-logrotate进行日志分割

pm2的日志管理及使用pm2-logrotate进行日志分割 一、说明二、pm2-logrotate安装及配置2.1 安装2.2 配置2.3 停止 pm2-logrotate服务 一、说明 pm2的自带日志管理功能:   pm2的日志模块默认是每一个服务进程都分配两个默认的日志文件两个日志文件 (Linux: /root/.pm2/logs) (W…

Eprime打marker--Net Station软件

Eprime打marker--Net Station软件 0 引言1 串口打marker2 Net Station软件打marker2.1 Eprime中打上标签2.2 Net Station软件中打上marker 3 总结 0 引言 本系列内容所有操作方式均在Net Station软件上进行,数据采集电脑为MAC,运行范式电脑为Windows。 …

音视频通信

文章目录 一、音视频通信流程二、流媒体协议1、RTSP2、RTMP3、HLS4、WebRTC 一、音视频通信流程 音视频通信完整流程有如下几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等。 每一个细分环节,还有更细分的技术模块。比如,前后处…

RFC6749-OAuth2.0

前言 最近在项目中需要实现SSO(单点登录)功能,以实现一处注册,即可在任何平台之间登录的功能。我们项目中并没有直接对接第三方认证系统而是通过集成keycloak 完成一系类安全协议的对接工作。如果我们在代码级别自己完成各种安全协议的对接是一项十分大的工程。不仅要走统一的…

【前端技术】LocalForage数据存储

✨专栏介绍 在当今数字化时代,Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序,就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术,以及各种框架、库和工具…