电子产业一站式赋能平台

PCB联盟网

搜索
查看: 158|回复: 0
收起左侧

有哪些不推荐使用的嵌入式 C 语言语法特性?

[复制链接]

514

主题

514

帖子

2472

积分

三级会员

Rank: 3Rank: 3

积分
2472
发表于 2024-11-21 17:50:00 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师
: @7 k8 w; o0 p! w- {关注我,一起变得更加优秀!
6 V+ m+ f6 ]+ `; @& A5 d  M从事嵌入式软件开发的工程师朋友都知道,C 语言是一种非常灵活和强大的编程语言,尤其是在操作系统内核方面,C 语言更有着举足轻重的地位。
. }! T. U, K0 w* f但是,随着 C 语言编程实践的发展和编程语言的演进,以往经常使用的一些 C 语言语法特性,逐渐开始被行业认为,不推荐使用。5 a/ k; f) A( m+ k' ~$ m
主要因为,使用这些语法特性可能会导致代码可读性差、可维护性低、安全性问题或者效率低下。
% d1 F# Y( G: {

10p2n3ygbk16403644005.jpg

10p2n3ygbk16403644005.jpg
- ]% i4 Y8 n0 ?+ B" n( [* `5 K
以下是一些不建议使用的 C 语言语法特性:
; F  o- a: i" n6 X1. 魔法数字(Magic Numbers)
' S& e' v+ e; f6 `5 Z直接在代码中使用具体的数值,如 if (x == 5) ,而不是定义为常量或枚举类型。这样做会导致该段代码语义含糊,维护该代码的程序员极有可能不知道该数字所表达的含义。
* v9 d7 Q' B- F- n4 C2. 全局变量
- W2 W2 E! s+ e) k8 B过度使用全局变量可能导致代码难以理解和维护,因为它们可以在程序的任何地方被修改,并且让各个模块存在高度的耦合,C 语言软件规模越大,越不建议使用全局变量。1 b& [0 R1 V" ^5 n7 v: X
嵌入式 C 语言,为什么全局变量越少越好?
1 w, m" |& p! d# P( {' |( ]3. 宏(Macros)
0 b# |8 I3 E1 d, r宏其实很有用,可以帮助程序员借助编译器的运算能力,在预处理阶段处理一些内容,但过量地使用宏定义,可能会导致代码阅读性变差,并且可能导致代码难以调试和容易出错,尤其是在宏展开时。
9 X3 x; A2 x0 n4. 指针运算7 t* t$ `0 k8 }8 ^4 W: ?* M
直接操作指针进行算术运算,如 p++ ,效率有时是比较高的,但一定一定要注意在进行指针运算时,指针的运算范围限定,一不小心使用不当,极有可能会造成内存访问错误。
8 y6 d/ C% r1 X' \5. goto语句
* \8 d5 p( Q+ W# P3 ngoto 语句可以跳转到程序的任意位置,这个跳转可以任意操作并且会忽略一大段逻辑结构代码,虽然很多错误处理都使用goto,但在业务逻辑设计时建议慎用,这会很容易破坏代码的结构化,使得代码难以阅读和维护。& ~$ B* |; n( R
6. 未使用的代码/ t# V$ }2 H* ]0 l$ h$ o
代码中如果存在大量未使用的变量和函数,这可能会导致混淆和不必要的编译警告,并且会让后期的代码维护变得复杂和困难,建议代码提交的时候,把不必要的代码进行注释屏蔽或者直接删除。8 E8 u. y& `6 N( V' m
7. C语言中的布尔类型滥用7 p2 U) z4 Z& H" g' Q- F  C
很多 C 语言程序员喜欢用整型值 0 和 1 用作布尔值,用数字 0 表示 false,用数字 1 表示 true,而不是使用 _Bool 类型,这在以前旧的 C 语言语法里面很常见,但建议还是使用 bool 关键字进行变量定义。9 ^. M" }1 N: [  R" n8 u1 @
8. 不安全的字符串操作/ ?, {- u/ {8 R' C! @
使用 strcpy 或 strcat 等不安全的字符串函数,这样可能会导致缓冲区溢出,因为这类字符串操作函数不会检查缓冲区的大小,它们会直接操作到字符串的 ‘\0’ 直至结束。
+ _- v+ A. n4 P* P+ F. H9 @: D9. 不检查函数返回值; b9 W! ?$ A6 b8 g9 z
对于返回错误信息的函数,不检查其返回值可能导致程序在遇到错误时继续执行。我们有时候为了省事和方便,会有意无意地忽略函数或模块的返回值,但有时候,返回值包含了丰富的函数执行信息。) H+ {' ^$ Q. k% N$ k
10. 不使用const关键字
' b/ _, f$ \( S+ r对于不应该被修改的变量不使用 const 关键字,这可能导致意外修改和难以发现的错误。在变量传参或初始化定义时,对于一些不再被修改的变量,建议使用 const 关键字,告诉程序员和编译器,该变量在使用时不会再被修改。
, B) b6 D' ?* T1 K& p" @这些只是一些简单的举例,但并不是绝对禁止使用。实际上,是否使用某些语法还应该取决于具体的编程环境和业务需求。
$ D5 d0 q& o8 g* [, e有些规范在当时可能是最佳的解决方案,但随着业务和技术的发展,更好的替代方案也可能随之出现., S1 d6 K7 q8 Y8 W, \! u5 z1 s
在实际编程中,应该尽量遵循最佳的编程实践和代码规范,以提高代码的质量和可维护性。
, N% v1 [7 X; L; x-END-2 \. H" L6 _4 B0 j8 p
往期推荐:点击图片即可跳转阅读
0 {# C  L$ ^+ n8 Y0 `& z                                                        / v* j3 z- c' Z. H+ `9 |* M; v6 g4 g
                                                                & ^# a3 ^" h: p! @7 ^0 `9 q9 E
                                                                        6 T2 b* T) T' L, b& ~) R) ]# @
                                                                                4 ~+ }- {, X8 u& A% S( i- Y

phifwgcmtao6403644105.jpg

phifwgcmtao6403644105.jpg

$ z* ^1 C: E. H$ _% O& o4 h                                                                                . m3 c# ^0 G' |: z  n- z
                                                                                        看了嵌入式大佬的日常工作,真的,我大写一个【服】字!
9 p+ o0 G" G9 p, O                                                        7 D" N0 I/ i1 V) h9 t
                                                                " G' o. F& G8 s/ o, M+ Z
                                                                        - `4 U( h8 c( h4 F
                                                                               
8 l9 |! k2 m; c4 v, {7 A

r22qtmgex1m6403644205.jpg

r22qtmgex1m6403644205.jpg
/ ?5 N: ?! l/ [6 {7 m; S# R+ I( L
                                                                               
5 G4 Y4 V) o! F, n                                                                                        哔!你写的嵌入式 C 语言代码,短路啦!, t) r# t' d% y: ?/ c+ H' o
                                                               
) z8 y/ H+ f2 ~) [; j                                                                       
' Q3 A( X0 B' n9 M                                                                               
* i0 F% L) d4 V9 ^* F. u9 F

zx2nc24sqyw6403644305.jpg

zx2nc24sqyw6403644305.jpg

" U& z7 o  F$ I( U; ^: _+ t% |+ L- ]                                                                               
, |5 }9 Q  p3 }% u7 I( X                                                                                        嵌入式软件,写代码之前,真的不需要进行软件架构设计吗?7 ?" E: g4 P* @, n6 y9 z3 E5 O
                                                                                8 d5 i% E  t4 v. p2 N) Y* k
                                                                        $ x) M  s, f3 T" `- s4 J  O
                                                               
8 J5 ?3 ^" y/ s                                                        我是老温,一名热爱学习的嵌入式工程师
/ {5 v2 H2 @% {/ D" ~关注我,一起变得更加优秀!
' N" A1 _. k2 r0 v/ u# ?  \8 Z' f

ej4bzwdfiy56403644406.png

ej4bzwdfiy56403644406.png
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表