C语言编程规范

 

【规则2-1-6】不允许在头文件中定义变量。

说明:

在头文件中定义的变量,在该头文件被多个源文件包含后,相当于在不同源文件中分别被定义。如果该变量是全局变量,最终编译器在链接时会因为出现重复的符号而出错。

【建议2-1-1】头文件应该自包含(self-contained)。

说明:

所有头文件要能够自给自足。换言之,用户和重构工具不需要为特别场合而包含额外的头文件。

【建议2-1-2】只有当函数只有10行甚至更少时才将其定义为内联函数。

说明:

当函数被声明为内联函数之后, 编译器会将其内联展开, 而不是按通常的函数调用机制进行调用.只要内联的函数体较小, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联。

【建议2-1-3】尽可能地避免使用前置声明,应使用 #include 包含需要的头文件。

说明:

尽可能地避免使用前置声明。可使用 #include 包含需要的头文件。 缺点:

  • 前置声明隐藏了依赖关系,头文件改动时,用户的代码会跳过必要的重新编译过程。
  • 前置声明可能会被库的后续更改所破坏。前置声明函数或模板有时会妨碍头文件开发者变动其 API. 例如扩大形参类型,加个自带默认参数的模板形参等等。
  • 前置声明来自命名空间 std:: 的 symbol 时,其行为未定义。
  • 很难判断什么时候该用前置声明,什么时候该用 #include 。极端情况下,用前置声明代替 includes 甚至都会暗暗地改变代码的含义。

reference(C++前置声明介绍):

https://blog.csdn.net/leo_888/article/details/81124144

https://blog.csdn.net/qingzhuyuxian/article/details/92157301

【规则2-1-4】 代码入库之前,先通过代码格式化工具处理再合入。

说明:

代码格式化工具能够自动处理TAB、对齐、括号、换行等规则,保持代码的美观和统一,相关的工具有indentastyleuncrustify等。

【规则2-2-3】定义指针类型的变量,*应放在变量前。

正例:

c float *pfBuffer;

反例:

c float* pfBuffer;

**【建议2-2-4】如果一个布尔表达式超过标准行宽, 断行方式要统一。 **

说明:

逻辑与 (&&) 、逻辑或 (||) 操作符均位于开头。 可以考虑额外插入圆括号, 合理使用的话对增强可读性是很有帮助的。

**【建议2-2-6】空行越少越好(程序实体之间有且仅有一行空行区分,每个文件末尾都应该有且仅有一行空行)。 **

说明:

这不仅仅是规则而是原则问题了:不在万不得已,不要使用空行。尤其是:两个函数定义之间的空行不要超过 2 行,函数体首尾不要留空行,函数体中也不要随意添加空行;不同逻辑程序块之间要使用空行分隔。 基本原则是:同一屏可以显示的代码越多,越容易理解程序的控制流。当然,过于密集的代码块和过于疏松的代码块同样难看,这取决于你的判断。但通常是空行越少越好。下面的规则可以让加入的空行更有效: 函数体内开头或结尾的空行可读性微乎其微。在多重 if-else 块里加空行或许有点可读性。

**【建议2-2-7】不要在 return 表达式里加上非必须的圆括号。 **

说明:

【建议2-2-8】不推荐使用问号表达式(?);如使用的话,则前后应该有一个空格。

说明:

【规则2-3-4】结构型的数组、多维的数组如果在定义时初始化,按照数组的矩阵结构分行书写。必须全部人工赋初值,编译器不一定会缺省赋初值。

正例:

c int aiNumbers[4][3] = { 1, 1, 1,

                 2, 4, 8,

                 3, 9, 27,

                 4, 16, 64 }

 

【规则5-1-3】宏定义中如果包含表达式或变量,表达式和变量必须用小括号括起来。

说明:

在宏定义中,对表达式和变量使用括号,可以避免可能发生的计算错误。

正例:

#define  HANDLE(A, B)   (( A ) / ( B ))

反例:

#define  HANDLE(A, B)   (A / B)

【规则5-1-6】书写数字时不要在前面添0,否则就成为8进制数。

说明:

例如 063 = (63)8 = (51)10。

【规则5-1-7】全局变量必须定义在源文件中,不允许定义在头文件中。

说明:

全局变量被定义在头文件中,如果头文件一旦被包含,包含该头文件的地方就会在Memory中生成无用的内容,浪费Memory空间,因此不允许在头文件中使用。

【规则5-1-11】定义全局变量时须进行初始化。

说明:

在C语言里,全局变量如果不初始化的话,默认为0,也就是说在全局空间里:int x =0; 跟 int x; 的效果看起来是一样的。但其实这里面的差别很大,他们的主要差别如下: 编译器在编译的时候针对这两种情况会产生两种符号放在目标文件的符号表中,已初始化的变量叫强符号变量,未初始化的变量叫弱符号变量。 连接器在连接目标文件的时候,如果遇到两个重名符号变量,会有以下处理规则: 1、如果有多个重名的强符号变量,则报错。 2、如果有一个强符号变量,多个弱符号变量,则以强符号变量为准。 3、如果没有强符号变量,但有多个重名的弱符号变量,则任选一个弱符号变量。 所以,如不初始化就可能会出现意想不到的错误。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为C语言编程规范是华为公司制定的用于规范C语言程序编写的一套准则。该编程规范主要是为了提高代码的可读性、可维护性和可重用性,减少潜在的错误和bug,并确保编写出高质量的软件。 华为C语言编程规范强调以下几个方面: 1. 命名规则:变量、函数及其他标识符采用有意义的、清晰的命名,避免使用过于简单的单个字母或缩写。 2. 缩进与排版:使用适当的缩进与排版格式,使代码结构清晰,易于阅读。统一使用空格或者Tab键进行缩进,保持一致性。 3. 注释规范:对代码进行适当的注释,解释代码的功能、实现思路、特殊情况等,方便他人理解和维护代码。 4. 函数规范:函数应该尽量短小、功能单一,避免出现过长的函数和过多的嵌套。函数的参数应该清晰明确,避免过多的全局变量的使用。 5. 错误处理:对于可能出现错误的情况,要进行适当的错误处理,包括返回错误码或者抛出异常,确保程序的健壮性和可靠性。 6. 内存管理:合理使用内存,避免内存泄漏和内存溢出,尽量使用动态内存分配和释放函数,如malloc和free。 7. 其他规范:遵守C语言标准,并避免使用C语言的一些不规范的用法和语法。 遵循华为C语言编程规范可以提高代码的可读性和可维护性,降低软件开发过程中出现错误的几率,提高开发效率。同时,也方便其他开发人员理解和修改代码,并且保证代码的质量和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值