电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

568

主题

568

帖子

4219

积分

四级会员

Rank: 4

积分
4219
发表于 2024-11-21 17:50:00 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师! r- l& c. Q9 _2 y# O
关注我,一起变得更加优秀!
* h9 E" P* m# y6 c7 T; [3 F! }从事嵌入式软件开发的工程师朋友都知道,C 语言是一种非常灵活和强大的编程语言,尤其是在操作系统内核方面,C 语言更有着举足轻重的地位。, |( i$ W  _1 Z& i' x" U& J6 c
但是,随着 C 语言编程实践的发展和编程语言的演进,以往经常使用的一些 C 语言语法特性,逐渐开始被行业认为,不推荐使用。4 Y2 w0 x8 Z! n
主要因为,使用这些语法特性可能会导致代码可读性差、可维护性低、安全性问题或者效率低下。
- N+ `5 i* q$ L3 v7 x

10p2n3ygbk16403644005.jpg

10p2n3ygbk16403644005.jpg

5 [) b: [+ z/ y- G- }以下是一些不建议使用的 C 语言语法特性:
. k6 _& @2 T; K1. 魔法数字(Magic Numbers)
& X8 u9 j3 N8 ~+ I6 ~3 H& Y; e直接在代码中使用具体的数值,如 if (x == 5) ,而不是定义为常量或枚举类型。这样做会导致该段代码语义含糊,维护该代码的程序员极有可能不知道该数字所表达的含义。
0 A" ^+ n6 J5 B7 Y8 l+ ^8 Z: k2. 全局变量
- D* e5 \3 Q  @. [* J% O过度使用全局变量可能导致代码难以理解和维护,因为它们可以在程序的任何地方被修改,并且让各个模块存在高度的耦合,C 语言软件规模越大,越不建议使用全局变量。9 a0 @' G, R- D
嵌入式 C 语言,为什么全局变量越少越好?; d# Y- T3 S; f7 d: F2 h
3. 宏(Macros)! F: N; p: G7 w3 g# C& i
宏其实很有用,可以帮助程序员借助编译器的运算能力,在预处理阶段处理一些内容,但过量地使用宏定义,可能会导致代码阅读性变差,并且可能导致代码难以调试和容易出错,尤其是在宏展开时。5 C# }9 V7 T4 w  e5 n( [9 w
4. 指针运算
7 ]' V6 o4 p9 H  y- W2 j直接操作指针进行算术运算,如 p++ ,效率有时是比较高的,但一定一定要注意在进行指针运算时,指针的运算范围限定,一不小心使用不当,极有可能会造成内存访问错误。$ z  g  K1 m2 W3 j4 G/ q# }. m
5. goto语句
& o# s% E* y6 ?7 r  h; t2 Tgoto 语句可以跳转到程序的任意位置,这个跳转可以任意操作并且会忽略一大段逻辑结构代码,虽然很多错误处理都使用goto,但在业务逻辑设计时建议慎用,这会很容易破坏代码的结构化,使得代码难以阅读和维护。
6 a9 {3 @& H/ T; A- ]& D: i+ m6. 未使用的代码
0 o, E  [& ]. b2 c# U" t代码中如果存在大量未使用的变量和函数,这可能会导致混淆和不必要的编译警告,并且会让后期的代码维护变得复杂和困难,建议代码提交的时候,把不必要的代码进行注释屏蔽或者直接删除。% n9 }8 k3 o) @6 D" t
7. C语言中的布尔类型滥用
3 @3 H  S2 o, N6 T; f2 u0 }很多 C 语言程序员喜欢用整型值 0 和 1 用作布尔值,用数字 0 表示 false,用数字 1 表示 true,而不是使用 _Bool 类型,这在以前旧的 C 语言语法里面很常见,但建议还是使用 bool 关键字进行变量定义。& J1 b& J$ d& A/ Q) p+ ]0 D) d
8. 不安全的字符串操作# R) x2 W: h; W/ z
使用 strcpy 或 strcat 等不安全的字符串函数,这样可能会导致缓冲区溢出,因为这类字符串操作函数不会检查缓冲区的大小,它们会直接操作到字符串的 ‘\0’ 直至结束。
7 h( H4 d) N; Y5 l# s4 t9. 不检查函数返回值' Q# |- A, ^6 {0 I7 G& T6 u7 q
对于返回错误信息的函数,不检查其返回值可能导致程序在遇到错误时继续执行。我们有时候为了省事和方便,会有意无意地忽略函数或模块的返回值,但有时候,返回值包含了丰富的函数执行信息。
0 P$ |& d% B) n. i5 z2 I+ I10. 不使用const关键字, W5 _& q5 j! I) J) F$ A* |4 l
对于不应该被修改的变量不使用 const 关键字,这可能导致意外修改和难以发现的错误。在变量传参或初始化定义时,对于一些不再被修改的变量,建议使用 const 关键字,告诉程序员和编译器,该变量在使用时不会再被修改。
. i; r; D: a: r" q这些只是一些简单的举例,但并不是绝对禁止使用。实际上,是否使用某些语法还应该取决于具体的编程环境和业务需求。- y! S! H) y; U8 V" y
有些规范在当时可能是最佳的解决方案,但随着业务和技术的发展,更好的替代方案也可能随之出现.
4 W+ ]$ _& k/ ^* t  e4 H在实际编程中,应该尽量遵循最佳的编程实践和代码规范,以提高代码的质量和可维护性。
2 n4 v1 ^/ M! o  R-END-
5 Q0 f, J" P1 Y  T$ f往期推荐:点击图片即可跳转阅读0 v$ w. c$ W) s# C1 ^+ F
                                                        7 [$ n/ Z' _. P5 n) F
                                                                " X  g$ F4 p- V9 o# H
                                                                       
: ]1 A2 n2 I3 ]) D$ v' n* c3 w2 h/ ?                                                                                7 h- K" @, V5 A" v5 D& j3 c' ^. ]

phifwgcmtao6403644105.jpg

phifwgcmtao6403644105.jpg
- Y* a& C/ N% k
                                                                                5 j% {( O  p5 Y- C9 c! Z
                                                                                        看了嵌入式大佬的日常工作,真的,我大写一个【服】字!4 A& s# d9 D" F/ ?
                                                        6 R8 ?0 c# Q/ X3 ?
                                                               
+ U' v$ D) I* d, j+ X. i                                                                       
5 U3 k% v& x, c5 s                                                                                1 r( ^8 G, ?5 J) ]

r22qtmgex1m6403644205.jpg

r22qtmgex1m6403644205.jpg

! y: n: a# b9 d" ?                                                                                3 ^' W% O* i: A& _( U' f) F) P' \
                                                                                        哔!你写的嵌入式 C 语言代码,短路啦!
, D. D  P" R$ V  U                                                               
/ U; B, o4 ~% l, a  Z& F                                                                        . K3 f7 m& O6 A/ z
                                                                               
2 o; G: Q, a4 I  s' p) f5 \

zx2nc24sqyw6403644305.jpg

zx2nc24sqyw6403644305.jpg
- B% R5 [/ ~# ?
                                                                               
1 \( R; z9 O: x, C* E                                                                                        嵌入式软件,写代码之前,真的不需要进行软件架构设计吗?# v5 D/ v3 Z; N( U1 o. ^5 S
                                                                               
9 _6 J' }) t/ k6 k0 Y                                                                       
( m) E1 ]. G6 P  k' C1 ^" g                                                               
- v3 R( I$ _# e" `% \  N                                                        我是老温,一名热爱学习的嵌入式工程师* f+ G' _% e! ^- M5 M
关注我,一起变得更加优秀!& R/ Y) [. |+ J  u( u, o

ej4bzwdfiy56403644406.png

ej4bzwdfiy56403644406.png
回复

使用道具 举报

发表回复

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

本版积分规则


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