C潜规则篇之符号命名

【esp32&lvgl】-2.2 # esp32移植lvgl8驱动st7789屏幕(ESP-IDF框架) esp32移植lvgl8驱动st7789屏幕(ESP-IDF框架) 阅读详情

    C语言中如果能从名字看出符号(变量函数等)的类型和含义,就能一定程度上提高代码可读性,为此前人也总结出很多技巧,如著名的匈牙利命名法。不过每个人的盲点和兴奋点不同,预防与激励方法也不可能相同,所以各种命名法都有争议。这里只提醒大家注意好命名的作用,有意识地总结适合自己的方法,从而提高工作效率。下面是个人习惯,供参考:

    1)宏定义和枚举常数全部用大写字母命名,在复合词里用下划线隔开每个单词。如:DISP_BUF_SIZE, MIN(), MAX()。

    2)全局变量以g或g+模块缩写(大写)作前缀,后面跟第一个字母大写的变量名。C中全局变量是不稳定因素,要保持警惕(见重入一章),用前缀显式标识变量为全局,能起到提示作用。名称前加上模块的缩写,可以在多模块集成链接时,避免模块间全局变量重名(见命名污染),如gOSCounter, gALGErrRet等。

    3)局部变量中,循环计数/数组下标可用i,j,k,m依次表示。除此以外,其它变量加前缀表示变量类型,这是匈牙利命名法的思想,前缀没有统一规范,个人推荐如下:p代表指针,pf指向函数的指针,f单精度浮点,db双精度浮点,u,s分别代表无符号与有符号数,即unsigned与signed。这样可以从变量名看出其类型,并避免一些bug,如:

    unsigned char i;

    if(i<=-1){  ……}  //错误,-1将自动转为无符号

    或许一开始程序员限定i是一个正数,于是定义成无符号,但程序编写过程中又想和0比较,此时很可能忘记其无符号属性,导致  i<=-1这种错误写法(见陷阱篇)。如果i改成uCnt,前缀”u”能做出提醒,所以这种命名方式物有所值。

    前缀确定后,后面变量名第一个字母大写以分段,多个单词首字母也大写,不必加下划线。符号名要用含义确切的词,不要用甲乙丙丁,1234这类偷懒方法。如果太长,尽量缩写。如:pBuf, pfFun1, fDivRet, sCommCh, uCount等等

    4)函数命名与变量类似,用缩略词,单词首字母大写,如:PutChar(),CodecInit()等。

    制定并遵守命名规则的目的只有一个,那就是增加可读性,无论是为自己或是他人。从符号命名上往往就能以小见大,影射出一个人的代码编写水平。当然命名只是代码规范的一部分,更具体的规范下节详述.

C++编译错误解析:y1重定义背后的命名空间污染与符号冲突 在C/C++编程中,符号管理与命名空间是编译器处理代码的核心机制。编译过程涉及符号表的构建,每个全局符号必须具有唯一的名称和类型标识。当用户定义的标识符与系统保留标识符冲突时,就会引发‘重定义为不同类型符号’的错误,这本质上是命名空间污染问题。这种冲突不仅影响代码可读性,更会导致链接失败和运行时异常。通过理解编译链接原理,开发者可以掌握系统性的排查方法,如使用命名空间封装、调整符号作用域等工程实践技巧。本文以常见的‘y1’冲突为例,深入分析符号冲突的底层机制,并提供从编译器探查到项目级预防的完整解决方案,帮 阅读详情

相关推荐

从‘跳线’到‘连接点’:电路图里那些没人明说但必须懂的绘图潜规则

本文深入解析电路图中那些未被明说但至关重要的绘图潜规则,从导线交叉的表示方法到电源网络的简化智慧,再到元件标注的逻辑体系。通过详细介绍基本电路图符号和电路图布局的规范,帮助工程师提升图纸的专业度和可读性,避免常见的设计错误。

weixin_29212867的博客 386

使用esp32 idf 移植LVGL驱动ST7796和GT911触摸屏的详尽攻略

使用esp idf驱动esp32并移植lvgl触摸显示屏案例,过程中成功驱动了st7796显示屏驱动和GT911触摸屏驱动。

punnnn的博客 9913

别只写代码了!聊聊Verilog标识符和关键字的‘潜规则’(附命名规范建议)

本文深入探讨Verilog标识符与关键字的工程实践,揭示其语法规则背后的设计哲学,并提供实用的命名规范建议。从大小写敏感性到特殊字符使用,再到团队协作中的命名冲突规避,帮助硬件工程师提升代码可读性和工具兼容性,优化团队开发效率。

weixin_30911451的博客 404

ESP32 IDF LVGL 1.47寸圆角屏幕测试

前言 基于ESP32 IDF框架移植的LVGL,IDF版本为4.3.1,LVGL版本为8.1.1。屏幕为中景园的1.47寸172x320分辨率的圆角IPS,驱动芯片为st7789v3。 B站视频效果: https://www.bilibili.com/video/BV1VP4y137K1?spm_id_from=333.999.0.0https://www.bilibili.com/video/BV1VP4y137K1?spm_id_from=333.999.0.0 在lvgl_esp32_driv

路漫漫其修远兮,吾将上下而求索! 3928

C++标识符命名规则与最佳实践:从语法基础到工程规范

在编程语言中,标识符是用于命名变量、函数、类等程序实体的基础概念。其核心原理在于为代码元素提供唯一且可识别的名称,以便编译器和开发者进行引用与组织。良好的标识符命名不仅关乎语法正确性,更是提升代码可读性、可维护性和团队协作效率的关键技术实践。从应用场景看,无论是系统底层开发、跨平台项目还是大型软件工程,统一的命名规范都能显著降低沟通成本与维护难度。本文聚焦C++标识符,深入解析其字符集限制、关键字避坑、作用域影响等底层规则,并结合现代C++特性(如auto类型推导与结构化绑定),系统阐述如何通过命名约定(如

weixin_30703911的博客 316

Carsim和Matlab/Simulink联合仿真时Carsim匹配不到Matlab的解决方法

      本人使用Carsim和Matlab/Simulink联合仿真做过用机器学习方法解决ACC和简单换道的仿真,曾将8.02 2016 2018三个版本Carsim反复安装N次,有相同方向的同学或安装过程遇到问题的同学可以加本人qq505625869一起交流经验心得。 一.前言       Carsim是一款很好的联合仿真软件,使用Carsim,可以避免搭建很多非常复杂的动力学模型

Kaikai_Liao的博客 8769

STM32移植LVGL官方PACK包方法,一键导入!

在2024年6月,LVGL与ARM公司展开合作,LVGL移植与应用起来就比较方便了,以前移植LVGL的方法很繁琐,需要去LVGL的GitHub里面拉取文件,然后就是一系列繁琐的移植操作,大部分的伙伴都是因为各种移植的问题而苦恼。这边我采用的方法就比较简单粗暴了,直接运用ARM公司推出的PACK包,这样就不会因为各种文件移植而苦恼了,接下来将带领各位伙伴们轻松移植LVGL。

weixin_74724281的博客 6120

ESP32搭配LVGL显示图片的两种方法详解:内部存储 vs 外部文件

本文详细介绍了ESP32搭配LVGL显示图片的两种方法:内部存储与外部文件。内部存储方案适合快速响应的小图片,而外部文件方案则适用于需要灵活更新和大容量图片的场景。通过对比分析,帮助开发者根据项目需求选择最优方案,提升嵌入式系统的UI性能。

weixin_30399821的博客 519

ESP32-S3-DevKitC-1移植LVGL(3.5寸TFT ILI9488)显示music-play-demo

最后:如果想要横屏显示,直接将lv_helpers.h文件里的横竖像素对调(水平480,垂直320),再在配置菜单栏里改为横屏landscape,保存编译下载即可。

weixin_45258729的博客 3448

【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere

银河麒麟作为国家核高基专项的重要成果,国防版凭借其卓越的安全性和可靠性,已成为军工领域的首选操作系统。之前我们在适配麒麟V4国防版的过程中已发现诸多安全性要求,而麒麟V10国防版在安全防护等级上又达到了更高的级别。本文将主要演示离线部署,因为军工项目基本不会出现联网场景。即使在线,也可以按离线方式部署,且离线部署由于有私有仓库,不会存在镜像获取不到和丢失情况。

jiaworld的博客 730

学习QT之应用程序打包发布

一、编译QT程序(release编译) 二、将release文件夹中的可执行文件复制到一个空的文件夹中 三、使用windeployqt打包工程 切换到可执行文件路径,执行windeployqt xxx.exe: 然后就会将程序所需要用到的资源以及库文件生成到可执行文件路径下: 此时应用程序就可以点击运行了。 四、使用Enigma Virtual Box封包(将文件夹内的文件集成为单可执...

贝勒里恩的博客 762

C潜规则篇之防止重定义

C程序编译时常出现类似xxx redefinition错误,除了模块间的命名冲突(命名污染及static),问题多数与头文件管理有关。大型C工程的头文件管理很麻烦:C源文件往往包含很多头文件,头文件又包含其他头文件,形成复杂的嵌套包含;C没有严格限定源文件和头文件的功能边界,二者都可以包含全局变量和函数等实体定义。这都可能导致类型或实体定义被重复包含和展开,使编译器抛出重定义错误。 解决重定

u013721481的专栏 2288

UNet 改进(27):结合SCSE注意力机制的UNet网络实现

本文介绍了一种结合SCSE注意力机制的改进UNet网络架构。该网络在保持UNet经典编码器-解码器结构基础上,通过在每层添加SCSEBlock模块,融合了通道注意力和空间注意力机制。通道注意力通过全局池化和1×1卷积生成通道权重,空间注意力则产生空间权重图,二者相加增强关键特征响应。该设计具有以下优势:1)保持原始UNet的多尺度特征提取能力;2)通过注意力机制提升对重要区域的关注度;3)计算效率高,仅增加少量参数。测试显示网络能保持输入输出分辨率不变,适用于医学图像分割等像素级预测任务。完整代码实现了5层

2401_82355416的博客 415

C++命名空间 vs 动态库符号冲突:你的代码真的安全吗?

本文深入探讨了C++命名空间在大型项目中的局限性,揭示了动态库链接时因符号冲突引发的潜在风险。文章重点分析了链接器处理重复符号的优先级规则,并提供了通过控制符号可见性、使用版本脚本和依赖隔离等策略,构建真正健壮的C++二进制接口(ABI)安全防线。

weixin_29002595的博客 223

2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题4)-网络部分解析-附详细代码

2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题4)-网络部分解析-附详细代码

bfq05234214的博客 441

100天精通Python(可视化篇)——第98天:Pyecharts绘制多种炫酷日历图参数说明+代码实战

一、日历图介绍 二、基础配置 1. 配置项类 2. 添加函数 3. 日期标签配置 4. 坐标系配置 三、日历图实战 1. 基础日历图 2. 日历热图

努力让自己发光,对的人才能迎着光而来 2万+

C潜规则篇之代码规范

很多初学者写代码只关注语法正确,而不在乎代码书写的规范和风格,导致写出来的代码乱七八糟,不但别人连自己都不愿多看一眼。这种代码难以维护,难以重用,更无法修改,功能再好也没人敢用。因此良好的代码规范不是可有可无,它不仅起美化作用,更重要的是使代码易阅读,易维护,提高工作效率。那么怎样给代码美容,使其看起来更“职业”呢?     除了上篇符号命名法外,前辈们在长期编程实践中总结出很多不成文的规范,教

半山茶馆 1449

【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦

好了,关于 【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。1、手动下载对应版本到 pyenv-win\install_cache 目录(如上手动操作安装步骤,文件名需匹配,如 python-3.10.0-amd64.exe)。该指令会列出,pyenv包管理工具所支持的所有python版本,

Spring Boot-Common On With You 852

【C语言基础】那些你可能不知道的C语言“潜规则”

什么是UL? C语言还有哪些后缀 U08、U16、U32 h\b\d\o inc和src文件夹

欢迎时常光顾我的干货超市,热衷于AIoT!! 2273

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PCB设计核心:网络表与元件封装的命名规范与实战解析

在电子设计自动化(EDA)领域,网络表(Netlist)和元件封装(Footprint)是连接逻辑原理与物理实现的关键桥梁。网络表本质上是电路所有电气连接的数字化清单,它定义了元件引脚间的逻辑关系,是进行电气规则检查(ERC)和生成布线飞线的基石。元件封装则定义了元器件在PCB上的物理形态,包括焊盘尺寸、位置和外形轮廓,确保实物能准确焊接。这两者的系统化命名与管理,直接决定了设计的可靠性、可制造性与团队协作效率。例如,采用“PA/CO”这类前缀分类体系(如PAC101对应COC1),能极大提升原理图与PCB

weixin_34377919的博客 445

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

给Fluent写UDF前,我劝你先搞懂这几个C语言‘潜规则’(附常用宏清单)

本文深入解析Fluent UDF开发中必须掌握的C语言‘潜规则’,重点揭示宏定义与常规C语言函数的本质差异,并提供实用的内存管理技巧和常用宏清单。特别强调指针操作、头文件包含顺序等关键知识点,帮助工程师避开常见编译错误和运行时崩溃,提升UDF开发效率。

weixin_30673611的博客 408

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++ 链接陷阱与底层溯源:ODR、inline 与匿名命名空间的那些坑

ODR的概念及现代化C++中inline和匿名空间的作用讲解。

2401_82413779的博客 427

C/C++头文件命名冲突:从标准库覆盖到项目结构优化的安全编程实践

在C/C++编程中,头文件是模块化开发的核心组件,其核心作用是声明函数、宏和类型,供多个源文件共享。编译器通过预定义的搜索路径规则(如`#include`指令的尖括号与双引号区别)来定位头文件。若命名不当,极易引发命名空间污染,导致编译错误或链接失败,严重影响项目的可维护性和团队协作效率。其技术价值在于通过清晰的命名和路径管理,确保编译单元的一致性,从而构建健壮的软件架构。这一实践在嵌入式开发、系统编程及大型项目协作中尤为重要。例如,在STM32开发中,若自定义头文件与标准库的`math.h`重名,会因路径

weixin_30435261的博客 435

基于MusePublic的C语言代码静态分析工具

本文介绍了如何在星图GPU平台上自动化部署🎨 MusePublic Art Studio镜像,赋能C语言代码静态分析任务。该镜像深度融合大模型语义理解能力,可精准识别内存泄漏、空指针解引用等典型缺陷,显著提升嵌入式与物联网项目代码质量保障效率。

weixin_35257663的博客 259

Altium Designer元件库大全:封装与符号创建完整指南

深入解析Altium Designer元件库大全,手把手教你完成元器件符号与PCB封装的创建流程,提升电路设计效率,覆盖从入门到进阶的核心技巧。

weixin_36328210的博客 811

EPLAN自动线号放置的‘潜规则’:如何让你的图纸既规范又高效?

本文深入探讨了EPLAN自动线号放置的‘潜规则’,帮助用户解决图纸编号混乱、规则失效等问题。通过分析四大典型场景和五个关键步骤,提供了一套完整的防错体系,确保图纸既规范又高效。特别适用于使用自定义符号库、部件库的中高级用户,提升设计效率和准确性。

weixin_30613433的博客 310
上一篇: 指针篇之十三 函数指针精彩回调
下一篇: C潜规则篇之代码规范
ipmux
博客等级 码龄24年 161粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值