我是老温,一名热爱学习的嵌入式工程师。关注我,一起变得更加优秀!
从事嵌入式软件开发的工程师朋友都知道,C 语言是一种非常灵活和强大的编程语言,尤其是在操作系统内核方面,C 语言更有着举足轻重的地位。
但是,随着 C 语言编程实践的发展和编程语言的演进,以往经常使用的一些 C 语言语法特性,逐渐开始被行业认为,不推荐使用。
主要因为,使用这些语法特性可能会导致代码可读性差、可维护性低、安全性问题或者效率低下。
以下是一些不建议使用的 C 语言语法特性:
1. 魔法数字(Magic Numbers)
直接在代码中使用具体的数值,如 if (x == 5) ,而不是定义为常量或枚举类型。这样做会导致该段代码语义含糊,维护该代码的程序员极有可能不知道该数字所表达的含义。
2. 全局变量
过度使用全局变量可能导致代码难以理解和维护,因为它们可以在程序的任何地方被修改,并且让各个模块存在高度的耦合,C 语言软件规模越大,越不建议使用全局变量。
嵌入式 C 语言,为什么全局变量越少越好?
3. 宏(Macros)
宏其实很有用,可以帮助程序员借助编译器的运算能力,在预处理阶段处理一些内容,但过量地使用宏定义,可能会导致代码阅读性变差,并且可能导致代码难以调试和容易出错,尤其是在宏展开时。
4. 指针运算
直接操作指针进行算术运算,如 p++ ,效率有时是比较高的,但一定一定要注意在进行指针运算时,指针的运算范围限定,一不小心使用不当,极有可能会造成内存访问错误。
5. goto语句
goto 语句可以跳转到程序的任意位置,这个跳转可以任意操作并且会忽略一大段逻辑结构代码,虽然很多错误处理都使用goto,但在业务逻辑设计时建议慎用,这会很容易破坏代码的结构化,使得代码难以阅读和维护。
6. 未使用的代码
代码中如果存在大量未使用的变量和函数,这可能会导致混淆和不必要的编译警告,并且会让后期的代码维护变得复杂和困难,建议代码提交的时候,把不必要的代码进行注释屏蔽或者直接删除。
7. C语言中的布尔类型滥用
很多 C 语言程序员喜欢用整型值 0 和 1 用作布尔值,用数字 0 表示 false,用数字 1 表示 true,而不是使用 _Bool 类型,这在以前旧的 C 语言语法里面很常见,但建议还是使用 bool 关键字进行变量定义。
8. 不安全的字符串操作
使用 strcpy 或 strcat 等不安全的字符串函数,这样可能会导致缓冲区溢出,因为这类字符串操作函数不会检查缓冲区的大小,它们会直接操作到字符串的 ‘’ 直至结束。
9. 不检查函数返回值
对于返回错误信息的函数,不检查其返回值可能导致程序在遇到错误时继续执行。我们有时候为了省事和方便,会有意无意地忽略函数或模块的返回值,但有时候,返回值包含了丰富的函数执行信息。
10. 不使用const关键字
对于不应该被修改的变量不使用 const 关键字,这可能导致意外修改和难以发现的错误。在变量传参或初始化定义时,对于一些不再被修改的变量,建议使用 const 关键字,告诉程序员和编译器,该变量在使用时不会再被修改。
这些只是一些简单的举例,但并不是绝对禁止使用。实际上,是否使用某些语法还应该取决于具体的编程环境和业务需求。
有些规范在当时可能是最佳的解决方案,但随着业务和技术的发展,更好的替代方案也可能随之出现.
在实际编程中,应该尽量遵循最佳的编程实践和代码规范,以提高代码的质量和可维护性。