当前位置: 首页 > article >正文

wow-iot 编码指南

项目地址https://github.com/wow-iot3/wow_linux_eval1、命名规则1数据类型整数类型使用stdint.h内定义格式约束为 int8_t/uint8_t int16_t/uint16_t int32_t/uint32_t int64_t/uint64_t2数据类型定义///结构体定义后缀_T,结构体指针_PT; typedef struct{ const FileOps_T *ops; size_t size; }FileHandle_T,*FileHandle_PT; ///枚举类型为_E; typedef enum{ POLLER_TYPE_NONE 0, POLLER_TYPE_POLL 1, POLLER_TYPE_EPOLL 2, POLLER_TYPE_SELECT 3, }PollerType_E; ///函数指针_f; typedef void (*event_call_f)(int sktfd,size_t events,const void* priv);3宏定义///约束定义方式1 #ifndef NULL #define NULL ((void *)0) #endif ///约束定义方式2 宏定义尽可能使用do{……}while(0),防止构造后的宏定义不会受到大括号、分号等的影响 对于中间处理函数包含break;continue不可以此方式包含 #define xxx do{……}while(0);4函数平台库外部接口 public: wow_module_ack 平台库内部接口 private: _wow_module_ack; 平台库静态接口 static: module_ack ;5)变量1)全局变量static int gn_signal 0; static int gns_signals[5] {0}; static Time_T* gpt_time NULL; static Timer_T gt_timer {0};2)函数传递参数指针类型void* pData; void** ppData; DevValue_U* puData; Time_T* ptTime; Time_PT ptTime; char* pcData; uint8_t* pu8Data; float* pfData; double* pdData;非指针类型bool bRet int nLen size_t snLen int8_t s8Len; uint8_t u8Len; int16_t s16Len; uint16_t u16Len; int32_t s32Len; uint32_t u32Len; int64_t s64Len; uint64_t u64Len; float fData; double dData; Status_E eMode; Time_T tTime;2、编码规范1编码规范[1] 输入参数的有效性在API接口函数实现判断深层内部函数不在进行判断; [2] 在不确定获取内容信息个数时不在使用数组个数方式实现采用链表方式传递; [3] 为统一与底层返回值统一所有函数返回值不允许使用bool类型的true、false; 返回值只存在成功值与失败值时定义0为成功 0为失败; 返回值只存在三种状态时定义0为成功 0临界状态 0为失败; [4] 函数代码块、函数功能尽量小原则性的行最长小于80字符最长24行; [5] 约束函数中尽可能不是用printf字段根据需求决定是串口输出还是网口输出; [6] switch中应有default;case语句内容使用{}包裹 [7] 有返回值的函数的每个分支都应该有返回值否则其返回结果是未知的; [8] 重复的代码片段提取成函数如果函数比较短考虑定义为 inline 函数; [9] 在栈上声明的变量必须初始化; [10] 文件路径尽可能使用绝对路径如文件名中包含 ../则会可能造成路径穿越导致任意文件的读写; [11] 比较数据大小时加上最小/最大值的校验; [12] 在对指针进行释放后需要将该指针设置为NULL;防止二次释放 [13] 可作为子表达式的宏定义应该用括号括起来 #define ABS(x) ((x) 0? -(x): (x)) 由多个语句组成的宏定义应该用 do-while(0) 括起来 #define SWAP(a, b) do {a ^ b; b ^ a; a ^ b;} while(0) [14] 声明头文件之间的依赖或排斥关系如果 bar.h 依赖 foo.h在 #include bar.h 之前必须 #include foo.h 可在 bar.h 中设置以下字段这样如果不满足条件无法通过编译。 // Header file bar.h #ifndef LIBRARY_FOO_H #error foo.h should be included first #endif [15] TODO、FIXME、XXX、BUG 等特殊注释表示代码中存在问题这种问题不应被遗忘应有计划地予以解决。 及时记录问题是一种好习惯而且最好有署名和日期。 void foo() { /* TODO: * Some plans... -- my name, date */ } [16] 头文件中不应使用静态声明 [17] 由 const 关键字修饰的全局对象已具有静态链接性internal linkage不应再用 static 关键字修饰 [18] 禁止 goto 语句向前跳转2编码安全[1]禁用不安全的字符串函数gets、sprintf、scanf、sscanf、strcpy、strcat [2]申请缓存或者数组时长度应为最大输入缓存长度1;且将最后一个租借设置为结束符\0 [3]realloc可变长度数组使用的内存量在编译期间不可知尤其是多次调用时禁止使用。 替换方案free后重新使用malloc申请。 [4]内存数据、内存地址等关键内容数据不应显示在Debug信息中。 [5]不应该在客户端代码中硬编码固定密钥对称加密秘钥应与服务端行认证秘钥协商生成对称秘钥。 [6]函数不可以返回栈上的变量的地址其内容在函数返回后就会失效。使用堆变量地址。 [7]当开发中复制粘贴语句请记得检查每一行代码不要出现上下两句一模一样的情况 [8]不得使用明文存储用户密码等敏感信息; [9]内存、临时缓存使用关键敏感信息后应及时抹除; [10]在计算时需要考虑整数溢出的可能尤其在进行内存操作时需要对分配、拷贝等大小进行合法校验; [11]在一些涉及大小端数据处理的场景需要进行大小端判断;3编码约束[1]代码与调试信息展示中不可包含敏感数据。 [2]避免用明文或弱加密方式传输敏感数据。 [3]避免敏感数据从内存交换到外存。mlock/munlock [4]敏感数据在使用后应被有效清理。 [5]公共成员或全局对象不应记录敏感数据。 [6]预判用户输入造成不良后果。 [8]确保字符串以空字符结尾。 [9]避免除0等计算异常4编码风格---缩进缩进使用制表符一个制表符等于4个空格。 ---注释注释单行不超过80列特殊情况除外。 ---布局库头文件系统头文件本地头文件宏定义数据结构定义全局变量函数定义

相关文章:

wow-iot 编码指南

项目地址&#xff1a;https://github.com/wow-iot3/wow_linux_eval 1、命名规则 &#xff08;1&#xff09;数据类型整数类型使用<stdint.h>内定义格式&#xff0c;约束为&#xff1a;int8_t/uint8_tint16_t/uint16_tint32_t/uint32_tint64_t/uint64_t&#xff08;2&…...

【大数据】分布式存储系统GFS与HDFS、高可用与高容错解析

目录 一、Chunk & Block 二、Master & Chunk Server&#xff1a;存储与计算的解耦&#xff1f; 1. 不准确&#xff01; 2. 调度与存储处理的解耦 解耦的具体含义 为什么这样设计&#xff1f; 3. NameNode & DataNode NameNode&#xff08;元数据管理&…...

PyCaret高性能计算:GPU加速训练指南

PyCaret高性能计算&#xff1a;GPU加速训练指南 【免费下载链接】pycaret An open-source, low-code machine learning library in Python 项目地址: https://gitcode.com/gh_mirrors/py/pycaret PyCaret是一个开源的低代码机器学习库&#xff0c;通过GPU加速功能可以显…...

pydata-book沟通技巧:如何向非技术人员解释数据分析结果

pydata-book沟通技巧&#xff1a;如何向非技术人员解释数据分析结果 【免费下载链接】pydata-book wesm/pydata-book: 这是Wes McKinney编写的《Python for Data Analysis》一书的源代码仓库&#xff0c;书中涵盖了使用pandas、NumPy和其他相关库进行数据处理和分析的实践案例和…...

从Swin到VMamba:视觉Transformer的效率革命

从Swin到VMamba&#xff1a;视觉Transformer的效率革命 【免费下载链接】VMamba 项目地址: https://gitcode.com/gh_mirrors/vm/VMamba 在计算机视觉领域&#xff0c;设计计算效率高的网络架构一直是持续的需求。随着视觉Transformer的发展&#xff0c;从Swin Transfor…...

终极SSH文件系统指南:sshfs如何让远程文件访问像本地一样简单

终极SSH文件系统指南&#xff1a;sshfs如何让远程文件访问像本地一样简单 【免费下载链接】sshfs File system based on the SSH File Transfer Protocol 项目地址: https://gitcode.com/gh_mirrors/ssh/sshfs sshfs是一款基于SSH文件传输协议的文件系统客户端&#xff…...

IEC 61850标准协议解读 5.基于Java的MMS实现 lec61850bean

专栏文章目录 第一章 IEC 61850标准协议解读 0.导言 第二章 IEC 61850标准协议解读 1.建模讲解 第三章 IEC 61850标准协议解读 2.基于Java的MMS实现 目录 专栏文章目录 前言 1 依赖库引入 2 创建服务端 3 创建客户端 4 读写模型 4.1 服务端读写 4.2 客户端读写 5.报告 6 文件服…...

wow-time时间操作说明

wow-time文件说明 项目地址&#xff1a;https://github.com/wow-iot3/wow_linux_eval本文件的功能主要用于处理时间操作&#xff0c;主要涉及时间信息获取(普通格式与cp56格式)、设置时间、格式转换、获取时间戳、获取毫秒数&#xff1b; 获取时间信息 int wow_time_get_cp56(C…...

探秘 ESCRCPY:一款高效便捷的无线屏幕镜像工具

探秘 ESCRCPY&#xff1a;一款高效便捷的无线屏幕镜像工具 【免费下载链接】escrcpy &#x1f4f1; Graphical Scrcpy to display and control Android, devices powered by Electron. | 使用图形化的 Scrcpy 显示和控制您的 Android 设备&#xff0c;由 Electron 驱动。 项目…...

100元打造便携显示器:PocketLCD完整物料清单与采购指南

100元打造便携显示器&#xff1a;PocketLCD完整物料清单与采购指南 【免费下载链接】PocketLCD 带充电宝功能的便携显示器 项目地址: https://gitcode.com/gh_mirrors/po/PocketLCD PocketLCD是一款带充电宝功能的便携显示器开源项目&#xff0c;让你花最少的成本拥有一…...

CGAL计算几何算法库完全指南:从入门到精通的终极教程

CGAL计算几何算法库完全指南&#xff1a;从入门到精通的终极教程 【免费下载链接】cgal The public CGAL repository, see the README below 项目地址: https://gitcode.com/gh_mirrors/cg/cgal CGAL&#xff08;Computational Geometry Algorithms Library&#xff09;…...

WHAT - 浏览器缓存机制系列(二)强缓存、协商缓存和启发式缓存

目录 一、介绍 二、强缓存 三、协商缓存 三、html & js 缓存策略 四、启发式缓存 启发式缓存什么时候发生 浏览器的推算规则 如果没有 Last-Modified DevTools 里怎么看出是启发式缓存 启发式缓存的风险 1. 浏览器行为不一致 2. 更新不可控 3. CDN 行为不同 总结 今天主要介…...

如何使用CoreRT:.NET Core终极AOT编译优化指南

如何使用CoreRT&#xff1a;.NET Core终极AOT编译优化指南 【免费下载链接】corert This repo contains CoreRT, an experimental .NET Core runtime optimized for AOT (ahead of time compilation) scenarios, with the accompanying compiler toolchain. 项目地址: https:…...

如何快速上手LedisDB:高性能NoSQL数据库的完整指南

如何快速上手LedisDB&#xff1a;高性能NoSQL数据库的完整指南 【免费下载链接】ledisdb A high performance NoSQL Database Server powered by Go 项目地址: https://gitcode.com/gh_mirrors/le/ledisdb LedisDB是一个由Go语言驱动的高性能NoSQL数据库服务器&#xff…...

mmdetection目标检测API封装:Python SDK开发全攻略

mmdetection目标检测API封装&#xff1a;Python SDK开发全攻略 【免费下载链接】mmdetection open-mmlab/mmdetection: 是一个基于 PyTorch 的人工智能物体检测库&#xff0c;支持多种物体检测算法和工具。该项目提供了一个简单易用的人工智能物体检测库&#xff0c;可以方便地…...

如何在Linux终端使用sc-im?新手入门的完整指南

如何在Linux终端使用sc-im&#xff1f;新手入门的完整指南 【免费下载链接】sc-im sc-im - Spreadsheet Calculator Improvised -- An ncurses spreadsheet program for terminal 项目地址: https://gitcode.com/gh_mirrors/sc/sc-im sc-im是一款功能强大的终端电子表格…...

TOMs插件生态系统:10个必装的官方认证扩展推荐

TOMs插件生态系统&#xff1a;10个必装的官方认证扩展推荐 【免费下载链接】TOMs TOMs is a fully open-source, high-performance, systematic, plugin-oriented, and scenario-agnostic general-purpose development framework. 项目地址: https://gitcode.com/gh_mirrors…...

探索未来桌面体验:AeroSpace Beta,专为Mac打造的高级窗口管理器

探索未来桌面体验&#xff1a;AeroSpace Beta&#xff0c;专为Mac打造的高级窗口管理器 【免费下载链接】AeroSpace AeroSpace is an i3-like tiling window manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ae/AeroSpace 在数字化的世界里&#xff0…...

如何快速入门Wireshark?Computer-Networking-A-Top-Down-Approach-NOTES实验教程

如何快速入门Wireshark&#xff1f;Computer-Networking-A-Top-Down-Approach-NOTES实验教程 【免费下载链接】Computer-Networking-A-Top-Down-Approach-NOTES 《计算机网络&#xff0d;自顶向下方法(原书第6版)》编程作业&#xff0c;Wireshark实验文档的翻译和解答。 项目…...

python-docx常见问题解答:新手必知的15个错误和解决方案

python-docx常见问题解答&#xff1a;新手必知的15个错误和解决方案 【免费下载链接】python-docx Create and modify Word documents with Python 项目地址: https://gitcode.com/gh_mirrors/py/python-docx python-docx是一个强大的Python库&#xff0c;用于创建和修改…...

智动群剪视频矩阵引

链接&#xff1a;https://pan.quark.cn/s/358832aed834智动群剪视频矩阵引擎&#xff0c;批量制作视频软件软件使用步骤&#xff1a;1.加入素材&#xff08;手动添加或复制素材到对应目录&#xff09; 2.勾选需要用到的素材 3.选择功能&#xff0c;修改数值 4.一键开始制作视频…...

AI变声器

链接&#xff1a;https://pan.quark.cn/s/fa61e826ee5e...

AI变声器+

链接&#xff1a;https://pan.quark.cn/s/9b9dd9ddd66d...

终极指南:Upspin核心架构完全解析——三大服务如何构建全球命名系统

终极指南&#xff1a;Upspin核心架构完全解析——三大服务如何构建全球命名系统 【免费下载链接】upspin Upspin: A framework for naming everyones everything. 项目地址: https://gitcode.com/gh_mirrors/up/upspin Upspin是一个创新的全球命名系统框架&#xff0c;旨…...

Slurm高级特性详解:QoS、资源限制与作业优先级配置指南

Slurm高级特性详解&#xff1a;QoS、资源限制与作业优先级配置指南 【免费下载链接】slurm Slurm: A Highly Scalable Workload Manager 项目地址: https://gitcode.com/gh_mirrors/sl/slurm Slurm作为一款高度可扩展的工作负载管理器&#xff0c;提供了强大的作业调度和…...

为什么我的电脑不能升级Windows 11?终极兼容性检测工具深度解析

为什么我的电脑不能升级Windows 11&#xff1f;终极兼容性检测工具深度解析 【免费下载链接】WhyNotWin11 Detection Script to help identify why your PC is not Windows 11 Release Ready. Now Supporting Update Checks! 项目地址: https://gitcode.com/gh_mirrors/wh/Wh…...

Gorilla技术播客系列:与AI先驱探讨函数调用的未来

Gorilla技术播客系列&#xff1a;与AI先驱探讨函数调用的未来 【免费下载链接】gorilla Gorilla: An API store for LLMs 项目地址: https://gitcode.com/gh_mirrors/go/gorilla Gorilla作为LLM的API商店&#xff0c;正在引领函数调用技术的革新。本播客系列邀请AI领域先…...

目前最全的计算机视觉公开数据集汇总 持续更新 400+数据集

总计:47个类别,涵盖约400+个具体数据集 这47个类别基本覆盖了计算机视觉的全部主流研究领域,从底层图像处理(去噪/增强/修复)到中层视觉(检测/分割/跟踪),再到高层理解(识别/问答/推理),以及3D视觉、多模态学习和特殊应用场景。 目录 一、通用视觉基础数据集(分…...

终极Bedrock持续集成指南:如何自动化测试和部署WordPress项目

终极Bedrock持续集成指南&#xff1a;如何自动化测试和部署WordPress项目 【免费下载链接】bedrock WordPress boilerplate with Composer, easier configuration, and an improved folder structure 项目地址: https://gitcode.com/gh_mirrors/be/bedrock Bedrock是一个…...

如何使用ATF快速开发Windows工具:完整入门指南

如何使用ATF快速开发Windows工具&#xff1a;完整入门指南 【免费下载链接】ATF Authoring Tools Framework (ATF) is a set of C#/.NET components for making tools on Windows. ATF has been in continuous development in Sony Computer Entertainments (SCE) Worldwide St…...