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

编码规范

if中与常量进行==判断,常量放在左边

if (a == 1) /* no 判断a和1是否相等 */
if (a = 1) /*  no 将1赋值给a,并判断a是否为非0 */
if (1 == a) /*  yes 将1赋值给a,并判断a是否为非0 */

goto只能往后跳

无拘无束地使用 goto 语句可能导致程序变得不可组织且难以理解。限制 goto 语句的使用,禁止向上跳跃,确保迭代仅通过语言中提供的迭代语句实现,有助于减少代码复杂性。

goto 只能往外跳或者代码块内部跳

goto 语句引用的标签必须在 goto 语句所在代码块或包含该代码块的父级代码块中声明

私有宏放在.c,接口宏放在.h

宏表达式中的变量要用()包起来,宏表达式整体要用()包起来

宏多条表达式需要用do{}while(0)包起来

宏表达式传参时,禁止使用自增和自减

宏中尽量不要用return,break,goto等(避免内存泄漏)

魔鬼数字用常量、宏或枚举来代替

if ... else if结构以else子句结束

switch必须有default分支

无符号数不要用在自减中

size_t是无符号数

命名规范

宏用(全大写 + 蛇型)

函数名字用(模块名_大驼峰)

函数参数用小驼峰

接口全局变量用(g_+大驼峰)

私有全局变量用大驼峰

静态变量用(s_+小蛇型)

局部变量用小蛇型

指针变量p_开头, 函数指针pf_开头

内存篇

释放掉的指针要赋值NULL(避免野指针)

禁止内存泄漏(Free掉即将失去指针的地址)

  • 删除结构指针时,从底层向上层顺序删除
  • 删除指针数组时,确保每一个元素都被释放
  • 使用return break语句的宏,确保前面的资源已经释放
  • 检查队列中每个成员是否释放

性能篇

以性能为名,使设计或代码更加复杂,从而导致可读性更差,但是并没有经过验证的性能要求(比如实际的度量数据和目标的比较结果)作为正当理由,本质上对程序没有真正的好处。无法度量的优化行为其实根本不能使程序运行得更快。

将与循环无关的操作放到循环外面执行

减少不必要的指令

对于多维数组的遍历,避免跳跃式访问数组成员

增加cache的命中率

使用内存池,避免频繁向系统申请内存

避免因内存碎片化导致的内存申请耗时

排版篇

语句过长换行需要在换行处增加一级缩进

换行时完整的语句放一行,而不是根据屏幕边界

空格问题

  1. 逗号、分号只在后面加空格

    int a, b, c;
    
  2. 比较操作符、赋值操作符、算数操作符、逻辑操作符、位域操作符等双目操作符的前后加空格

if (current_time >= MAX_TIME_VALUE)
a = b + c;
a *= 2;
a = b ^ 2;
  1. “!”、“~”、“++”、“--”、“&”(地址操作符)等单目运算符前后不加空格
*p = 'a';
flag = !is_empty;
p = &mem;
i++;
  1. “->”、"."前后不加空格
p->id = pid;
  1. if、for、while、switch等与后面的括号应加空格,使if等关键字更为突出、明显
if (a >= b && c > d)

表达式次序篇

函数参数只能传输一个确定的变量值

不可以是表达式函数的返回值。避免表达式的次序问题(见下图)

表达式的次序问题是根据编译器的不同而做出不同的处理。

int i = 1;
add(i, i++); // a = 2, b = 1, a + b = 3
i=1;
add(i++, i); // a = 1, b = 2, a + b = 3
i=1;
add(i=5, i++); // a = 5, b = 1, a + b = 6
i=1;
add(i++, i=5); // a = 6, b = 5, a + b = 11
i=1;
printf("%d %d %d\n", i++, i, i++); // 2 3 1
return 0; void add(int a, int b)
{printf("a = %d\nb = %d\na + b = %d\n\n\n", a, b, a + b);	return ;
}

一条语句中同一个变量不能同时被赋值和被赋值

int arr[] = {0,1,2,3,4,5,6,7,8};
int i = 1, j;
j =  i++ + arr[i];
// i = 2, j = 3
i = 1;
j = arr[i] + i++;
// i = 2, j = 2

一条语句中同一个指针不能同时被赋值和被赋值

与上同理

p->task_start_fn(p++);

&&||短路求值不可靠

if ( ishigh && (x == i++))

不同编译器会产生不同的结果

  • ishigh 为否时,后一个表达式不判断,i不变
  • ishigh 为否时,后一个表达式也判断,i增加 1
http://www.jsqmd.com/news/540981/

相关文章:

  • 2026年3月厦门发电机出租公司最新推荐:发电机、发电车租赁及泉州、漳州、莆田及各区域适配指南适配指南 - 海棠依旧大
  • SEO_网站SEO排名下降的常见原因及解决办法(304 )
  • 【优化求解】基于matlab粒子群算法PSO牛乳酪蛋白颗粒粒径分布反演【含Matlab源码 15228期】含参考文献
  • 2025终极发布指南|ente/auth从代码到用户的完整发布流程
  • Eclipse Mraa多平台支持:从树莓派到Intel Joule的无缝移植教程
  • Boss-Key老板键:如何用3分钟掌握一键隐藏窗口的终极技巧
  • 终极指南:如何解决markdown-preview.nvim防火墙问题并配置本地服务器端口
  • 黄冈去哪做头皮检测靠谱?黑奥秘手机查检测报告,改善变化看得见 - 美业信息观察
  • SkyWalking架构深度解析:揭秘APM系统核心设计与实现原理
  • 如何快速部署Uvicorn ASGI服务器到AWS Lightsail:终极云服务器配置指南 [特殊字符]
  • Phi-4-Reasoning-Vision一文详解:图文输入嵌入对齐损失优化
  • 2026年3月长岛渔家民宿最新推荐:长岛旅游住宿、长岛民宿、长岛旅游民宿、长岛住宿推荐渔家乐、吃住等场景选择指南 - 海棠依旧大
  • 效率提升秘籍:用快马AI一键生成成片PPT网站的高效代码框架
  • OneUptime审计跟踪功能:监控配置变更的全流程记录指南
  • LabelMe插件开发教程:自定义标注工具扩展实战
  • 实战应用:从git安装到项目初始化,用快马生成数据分析项目版本控制模板
  • Android超大图片处理终极指南:从0到1集成SubsamplingScaleImageView
  • 软考-信息系统项目管理师-项目采购管理-知识点及考点预测
  • 写作压力小了!盘点2026年遥遥领先的的降AI率平台
  • Kook Zimage真实幻想Turbo部署教程:OpenStack私有云中幻想图生成服务弹性伸缩方案
  • Apache Cassandra-Java-Driver实战教程:构建高可用分布式数据系统
  • 项目分享|UI-TARS-desktop:字节跳动开源的多模态GUI智能体桌面工具
  • 【优化求解】基于matlab粒子群算法PSO水环境非点源污染风险评价方法研究【含Matlab源码 15229期】含参考文献
  • Eclipse Mraa与Firmata:实现跨平台硬件控制的完美组合
  • 新手入门:用快马平台生成第一个labelimg式图像标注demo
  • 哔咔漫画下载器:3分钟掌握高效漫画批量下载与管理技巧
  • 像素幻梦工坊保姆级教程:FLUX.1-dev模型权重校验、缓存清理与版本回滚
  • eSpeak-ng音素集扩展终极指南:如何快速添加新语言发音规则
  • SEO_2024年最新SEO策略与方法完整指南(282 )
  • 终极MangoHud配置文件备份工具:轻松打造图形化管理界面