长文 | 大厂C语言编码规范
所谓无规矩不成方圆。任何团队规范都是怎么也绕不开的话题。特别是在我们搞嵌入式C开发的代码规范乃是开发的重中之重。有太多的理由去做规范因为每个人的代码编写喜好不同代码风格也迥然不同。每一个程序员心目中对好代码都有自己的主见统一的编码规范可以像秦始皇统一战国一样避免不必要的论战和争议。有时候会帮同学看一下代码发现大多写代码都是随心所欲。看起开非常头大虽然C语言很重要但是C语言代码规范也非常重要。今天分享的就是安富莱C语言编码规范建议初学者去官网看看他们的代码非常标准 一、文件与目录1、文件及目录的命名规定可用的字符集是A-Za-z0-9._-。2、源文件名后缀用小写字母.c和.h。3、文件的命名要准确清晰地表达其内容同时文件名应该精练防止文件名过长而造成使用不便。在文件名中可以适当地使用缩写。以下提供两种命名方式以供参考1各程序模块的文件命名开头 2 个小写字母代表本模块的功能如主控程序为mpMain.cmpDisp.c …2不写模块功能标识如主控程序为Main.cDisp.c …4、一个软件包或一个逻辑组件的所有头文件和源文件建议放在一个单独的目录下这样有利于查找并使用相关的文件有利于简化一些编译工具的设置。5、对于整个项目需要的公共头文件应存放在一个单独的目录下(例如myProject/include)下可避免其他编写人引用时目录太过分散的问题。6、对于源码文件中的段落安排我们建议按如下的顺序排列7、在引用头文件时不要使用绝对路径。如果使用绝对路径当需要移动目录时必须修改所有相关代码繁琐且不安全使用相对路径当需要移动目录时只需修改编译器的某个选项即可。#include “/project/inc/hello.h” /* 不应使用绝对路径 */#include “../inc/hello.h” /* 可以使用相对路径 */8、在引用头文件时使用 来引用预定义或者特定目录的头文件使用 “” 来引用当前目录或者路径相对于当前目录的头文件。#include /* 标准头文件 */#include /* 工程指定目录头文件 */#include “global.h” /* 当前目录头文件 */#include “inc/config.h” /* 路径相对于当前目录的头文件 */9、为了防止头文件被重复引用应当用ifndef/define/endif结构产生预处理块。#ifndef __DISP_H /* 文件名前名加两个下划线“__”后面加 “_H”#define __DISP_H......#endif10、头文件中只存放“声明”而不存放“定义”通过这种方式可以避免重复定义。/* 模块 1 头文件module1.h */externint a 5; /* 在模块 1 的 .h 文件中声明变量 *//* 模块 1 实现文件module1.c */uint8_t g_ucPara; /* 在模块 1 的 .h 文件中定义全局变量 g_ucPara */11、如果其它模块需要引用全局变量g_ucPara, 只需要在文件开头包含module1.h/* 模块 2 实现文件module2.c */#include “module1.h” /* 在模块 2 中包含模块 1 的 .h 文件 */......g_ucPara 0;......12、对于文件的长度没有非常严格的要求但应尽量避免文件过长。一般来说文件长度应尽量保持在1000行之内。二、排版1、程序块要采用缩进风格编写缩进的空格数为 4 个。2、相对独立的程序块之间、变量说明之后必须加空行。voidDemoFunc(void){uint8_t i;/* 功能块 1 */for (i 0; i 10; i){...}/* 功能块 2 */for (i 0; i 20; i){...}}3、作符处划分新行操作符放在新行之首划分出的新行要进行适当的缩进使排版整齐语句可读。if ((ucParam1 0) (ucParam2 0) (ucParam3 0)|| (ucParam4 0)){......}4、不允许把多个短语句写在一行中即一行只写一条语句。rect.length 0; rect.width 0;rect.length 0;rect.width 0;5、对齐使用TAB 键1 个 TAB 对应 4 个字符位。6、函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格case 语句下的情况处理语句也要遵从语句缩进要求。7、程序块的分界符如大括号‘{’和‘}’ 应各独占一行并且位于同一列同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及 if、for、do、while、switch、case 语句中的程序都要采用如上的缩进方式。对于与规则不一致的现存代码应优先保证同一模块中的风格一致性。for (...) {... /* program code */}for (...){... /* program code */}if (...){... /* program code */}if (...){... /* program code */}8、在两个以上的关键字、变量、常量进行对等操作时它们之间的操作符之前、之后或者前后要加空格进行非对等操作时如果是关系密切的立即操作符(如)后不应加空格。说明采用这种松散方式编写代码的目的是使代码更加清晰。由于留空格所产生的清晰性是相对的所以在已经非常清晰的语句中没有必要再留空格如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格多重括号间不必加空格因为在 C语言中括号已经是最清晰的标志了。在长语句中如果需要加的空格非常多那么应该保持整体清晰而在局部不加空格。给操作符留空格时不要连续留两个以上空格。1逗号、分号只在后面加空格。int_32 a, b, c;2比较操作符赋值操作符、 算术操作符、%逻辑操作符、位域操作符

相关新闻

LangGraph:构建长期运行智能体的底层编排框架

LangGraph:构建长期运行智能体的底层编排框架

1. LangGraph 核心定位与设计哲学LangGraph 本质上是一个面向长期运行、有状态智能体(stateful agents)的低层级编排框架。与常规任务编排工具不同,它的设计哲学体现在三个关键维度:持久化执行引擎:采用类似Pregel模型…

2026/7/21 5:34:41阅读更多 →
C++算法刷题实战:从无效刷题到构建结构化解题思维

C++算法刷题实战:从无效刷题到构建结构化解题思维

1. 项目缘起:从“无效刷题”到“有效沉淀”如果你也和我一样,在准备C面试或提升算法能力的路上,刷过《代码随想录》和LeetCode Hot 100,那你一定经历过这样的循环:今天看题解恍然大悟,明天遇到类似题目大脑…

2026/7/21 5:34:41阅读更多 →
C++与OpenCV实战:工业视觉物品检测四步流程详解

C++与OpenCV实战:工业视觉物品检测四步流程详解

1. 项目概述与核心思路最近在做一个工业视觉的辅助项目,核心需求是从一个相对简单的背景中,把目标物品准确地“抠”出来,并定位它的位置和轮廓。听起来像是图像处理里的经典问题,对吧?但真上手做,你会发现从…

2026/7/21 5:34:41阅读更多 →
OSWorld挑战:深入理解GitHub_Trending/ai/ai-agent-book中的操作系统级AI Agent测试

OSWorld挑战:深入理解GitHub_Trending/ai/ai-agent-book中的操作系统级AI Agent测试

OSWorld挑战:深入理解GitHub_Trending/ai/ai-agent-book中的操作系统级AI Agent测试 【免费下载链接】ai-agent-book 《深入理解 AI Agent:设计原理与工程实践》(李博杰 著)开源主仓库:全书正文、编译版 PDF 与按章配套…

2026/7/21 15:45:34阅读更多 →
深入解析C2000 CLB-XBAR寄存器组:硬件信号路由与实时控制

深入解析C2000 CLB-XBAR寄存器组:硬件信号路由与实时控制

1. 从硬件抽象到信号互联:CLB-XBAR寄存器组的设计哲学 在嵌入式微控制器领域,尤其是像TI C2000系列这样面向实时控制的应用,硬件抽象层(HAL)的设计往往直接决定了底层驱动的灵活性与效率。我们通常接触的GPIO、PWM、AD…

2026/7/21 15:45:34阅读更多 →
C++进制转换算法详解:从原理到竞赛实战

C++进制转换算法详解:从原理到竞赛实战

最近在准备信息素养大赛,发现很多同学在进制转换这类基础算法题上反复出错。这类题目看似简单,但涉及字符串处理、循环控制、边界条件等多个知识点,稍不注意就会丢分。本文将以一道典型的“进制转换”真题为例,从零开始&#xff0…

2026/7/21 15:45:34阅读更多 →
3步彻底解决ComfyUI-Easy-Use组件加载挑战:为什么你的节点菜单显示不全?

3步彻底解决ComfyUI-Easy-Use组件加载挑战:为什么你的节点菜单显示不全?

3步彻底解决ComfyUI-Easy-Use组件加载挑战:为什么你的节点菜单显示不全? 【免费下载链接】ComfyUI-Easy-Use In order to make it easier to use the ComfyUI, I have made some optimizations and integrations to some commonly used nodes. 项目地址…

2026/7/21 15:45:34阅读更多 →
TI处理器USB与DDR PLL配置实战:从寄存器解析到低功耗管理

TI处理器USB与DDR PLL配置实战:从寄存器解析到低功耗管理

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于德州仪器(TI)高性能处理器的项目中,时钟管理是决定系统稳定性、性能和功耗的基石。而锁相环(PLL)作为时钟生成的核心引擎,其配置的精细程度直…

2026/7/21 15:45:34阅读更多 →
毕业设计项目 python大数据旅游数据分析可视化系统(源码分享)

毕业设计项目 python大数据旅游数据分析可视化系统(源码分享)

文章目录 0 前言1 课题背景2 数据处理3 数据可视化工具3.1 django框架介绍3.2 ECharts 4 Django使用echarts进行可视化展示(mysql数据库)4.1 修改setting.py连接mysql数据库4.2 导入数据4.3 使用echarts可视化展示 5 实现效果5.1前端展示5.2 后端展示 6 …

2026/7/21 15:43:32阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →