c进阶篇(六)——结构体位域
c进阶篇(六)——结构体位域前言: 结构体位域可以方便对Bit级数据的操作,可以更有效的利用Bit数据空间。 1 数据存储大小端 大小端表示数据在计算机中的存放顺序。 小端模式:低字节保存在内存低地址,高字节保存在内存高地址。 大端模式:低字节保存在内存高地址,高字节保存在内存低地址。 在使用结构体位域操作和联合嵌套结构体时尤其需要注意数据存储的大小端问题。如果使用的是单片机,可以查看用户手册了解所用型号的单片机。 2 定义位域结构体 在符号 : 之后给出数据类型所占的Bit数,对数据位域长度进行限制,以下为了方便均假设数据存储为小段模式,即结构体中先定义的成员变量存储在低地址和低Bit字段。 123456789101112131415161718192021#include <stdio.h>#include <stdint.h>typedef uint8_t Byte;typedef uint16_t Word;typedef uint32_t...
c进阶篇(五)——匿名结构体
c进阶篇(五)——匿名结构体前言: 对c/c++程序员来说,结构体是非常常用的自定义数据类型,它对数据进行封装,使用匿名结构体可进一步增强数据的封装性。 1 什么是匿名结构体 以下是正常定义一个带名称的结构体示范。 12345typedef struct Rect{ Byte byLen; Byte byWide;}STRect; 名为 STRect 的结构体拥有两个成员 byLen 和 byWide ,要对其访问可以通过一个成员运算符即可访问 stRect.byLen 或 stRect.byWide 。 如果成员多几个 类别 ,往往会进行二次封装,比如矩形有关于尺寸的成员变量,也有关于颜色的成员变量。 1234567891011121314151617181920212223242526272829#include <stdio.h>#include <stdint.h>typedef uint8_t...
CMake基础篇(一)——安装CMake
CMake基础篇(一)——安装CMake前言: 作为c/c++的深度使用者,有必要对编译器有一定了解,而CMake就是一种知名的跨平台编译工具。 1 CMake简介 CMake是一种跨平台的编译工具,它语法简单,可以输出各种各样的makefile或project文件。CMake用于产生标准的构建档,使得开发者可以在不同的平台用标准的方式构建软件,实现一次编写编译规则,多个平台相同编译。 官方有详细的 介绍文档 供学习。 2 安装CMake2.1 Windows下安装CMake Windows下可以直接选择 CMake 的二进制文件安装,在 CMake下载 界面中找到最新版的msi下载。 下载后双击msi文件开始安装,安装很简单,一路 next 就行了。 2.2 Ubuntu下安装CMake 在Ubuntu下安装就简单多了,直接执行指令即可完成安装。 1sudo apt-get install...
解决Vim-visual-multi和coc.nvim插件冲突
解决Vim-visual-multi和coc.nvim插件冲突前言: Vim-visual-multi是一款非常好用的多光标插件,而coc.nvim更是一款功能强大的插件,它已不止用来补全和语法提示,这么好用的插件如果无法同时使用将是巨大的悲哀。 1 冲突问题 在同时安装了插件 vim-visual-multi 和 coc.nvim 后,若Coc检测到语法错误或警告并提示,那么此时在多光标模式下的操作存在两种错误,一种是按退格键一次性删除多个字符。 另一种错误是在多光标模式下按下 d 或 x 键出现异常报错,无法深处字符。 这个两个插件的冲突我已经在Github上向原作者提出了 mg979/vim-visual-multi/issues/172 。 2 运行环境 Win10 WSL Ubuntu 20.04LTS; Vim v8.1; vim-visual-multi master Git hash: 8566a31; coc.nvim master...
自娱自乐,我的博客(十四)——Coding改版后的部署
自娱自乐,我的博客(十四)——Coding改版后的部署前言: Coding已经改版一段时间了,改版最大的变动就是开始对网站部署收费。好在新用户从第一次部署开始前6个月免费,而最近Vercel也被墙了国内访问不了,所以这篇文章教你怎么在重新回到改版后的Coding上部署,本篇文章假设你已经在有过一些基础部署经验 1 重回Coding部署的原因 之前我已经在Coding上部署过(改版前),当时Coding免费且支持绑定自定义域名,而且访问速度还过得去(服务器在国内),后来收费所以跑到Vercel上部署,但Vercel近期被墙并且看不到恢复的希望,因此重新回到Coding好好利用它前六个月的免费期,六个月之后怎么办?到时候再说吧,懒得折腾到时候可能就付费了。 2 在Coding上新建网站 登录Coding官网,点开部署的项目仓库,点击左侧的 网站托管 ,然后点击页面的 新建网站 。 填写自己站点的信息,网站类型选静态仓库,网站类型选静态网站。节点如果网站已经备案选哪里随你,如果没有备案过智能选...
Vim解决Not an editor command ^M
Vim解决Not an editor command ^M前言: 本篇文章解决提示Not an editor command ^M的异常问题。 1 为什么会产生这个错误? 在Windows系统中换行符表示为 \r\n ,而在Unix系统中换行符表示为 \n ,这里的 ^M 其实就是Unix中的 \r ,当Windows下的文件在Unix中打开就会遇到换行符不同而无法识别的问题。 2 通过替换指令解决 可以在Vim中通过指令将 \r 删除掉,这样在Unix中就不会报错了。 1:%s/\r//g 这个方法也是网上很多人给出的方法,但我亲测了无效。 3 修改文件格式 更好的方法是直接修改文件格式(注意是 fileformat 不是 fileencoding ),在Windows下创建的文件默认器 fileformat 是 dos ,我们通过Vim打开该文件将其改为 unix 即可。 1:set fileformat=unix
Vim基础篇(二十五)——源与头文件快速切换插件a.vim
Vim基础篇(二十五)——源与头文件快速切换插件a.vim前言: 开发c/c++代码,经常需要在源文件和头文件之间切换,a.vim就是帮助我们实现快速切换的插件。 1 安装a.vim 插件 vim-scripts/a.vim 可以快速在c/c++源文件和头文件之间快速切换,是常用的插件之一因此建议安装。通过vim-plug插件管理器安装插件,在.vimrc中添加以下配置安装。 1Plug 'vim-scripts/a.vim' 在Vim中执行 :PlugInstall 指令进行安装。 2 配置vim-scripts/a.vim vim-scripts/a.vim是“开箱即用”的插件,不需要额外的配置,记住几个指令即可使用它。 3 用法介绍3.1...
Vim基础篇(二十六)——代码块选中插件vim-expand-region
Vim基础篇(二十六)——代码块选中插件vim-expand-region前言: 代码编辑会涉及到非常多的配对符,之前介绍过操作配对符的插件,那么如果以配对符为界快速选中代码块呢,如果使用v加方向键去选中将会非常低效。 1 vim-expand-region 插件 terryma/vim-expand-region 可以快速选中配对符内的代码块,将有效提高代码块的选择效率。通过vim-plug插件管理器安装插件,在.vimrc中添加以下配置安装。 1Plug 'terryma/vim-expand-region' 在Vim中执行 :PlugInstall 指令进行安装。 2 配置terryma/vim-expand-region terryma/vim-expand-region是“开箱即用”的插件,不需要额外的配置,甚至默认的按键映射我认为已经是最佳的了。 3 用法介绍3.1 命令模式 _ : 缩小选中范围。 + : 扩展选中范围。
Vim基础篇(二十四)——当前字符串高亮插件vim-cursorword
Vim基础篇(二十四)——当前字符串高亮插件vim-cursorword前言: vim-cursorword可以使Vim像IDE那样,高亮所有同当前光标下的字符串,使得阅读代码更便捷。 1 安装vim-cursorword 插件 vim-cursorword 高亮所有同当前光标下的字符串,通过vim-plug插件安装。 1Plug 'itchyny/vim-cursorword' 在Vim中执行 :PlugInstall 指令进行安装。 2...
Vim基础篇(二十三)——多光标插件vim-visual-multi
Vim基础篇(二十三)——多光标插件vim-visual-multi前言: vim-visual-multi是新一代的多光标插件,功能远比vim-multiple-cursors要强大很多,能实现功能丰富和灵活的多光标操作。 1 安装vim-visual-multi 插件 vim-visual-multi 是一款功能更加强大的Vim多光标插件,不能功能强于vim-multiple-cursors,而且运行速度也更快更流畅。 1Plug 'mg979/vim-visual-multi', {'branch': 'master'} 在Vim中执行 :PlugInstall 指令进行安装。 2...