电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

460

主题

460

帖子

963

积分

二级会员

Rank: 2

积分
963
发表于 昨天 17:50 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师5 t) E( v" E& E, V* i6 {/ b
关注我,一起变得更加优秀!
- C" i' A7 z: o从事嵌入式软件开发的工程师朋友都知道,C 语言是一种非常灵活和强大的编程语言,尤其是在操作系统内核方面,C 语言更有着举足轻重的地位。
6 C5 v( y: |' N但是,随着 C 语言编程实践的发展和编程语言的演进,以往经常使用的一些 C 语言语法特性,逐渐开始被行业认为,不推荐使用。9 p, f, ]. e( \$ q/ D; D
主要因为,使用这些语法特性可能会导致代码可读性差、可维护性低、安全性问题或者效率低下。' M4 `1 R0 Z, h

10p2n3ygbk16403644005.jpg

10p2n3ygbk16403644005.jpg

  r7 W4 _% G1 r. ?以下是一些不建议使用的 C 语言语法特性:) {5 ?$ l: x& V' o8 C; I9 N6 q# G
1. 魔法数字(Magic Numbers)1 g6 R( N2 [& ?" S. s
直接在代码中使用具体的数值,如 if (x == 5) ,而不是定义为常量或枚举类型。这样做会导致该段代码语义含糊,维护该代码的程序员极有可能不知道该数字所表达的含义。$ I3 s& v, k  o* O; i& U; `
2. 全局变量
$ @; r; @- O: H& a3 H  U过度使用全局变量可能导致代码难以理解和维护,因为它们可以在程序的任何地方被修改,并且让各个模块存在高度的耦合,C 语言软件规模越大,越不建议使用全局变量。6 s, e: x. N! A* L* c" g
嵌入式 C 语言,为什么全局变量越少越好?" }  n3 O- e1 t
3. 宏(Macros)
; ]+ C" E. z3 P2 v! K宏其实很有用,可以帮助程序员借助编译器的运算能力,在预处理阶段处理一些内容,但过量地使用宏定义,可能会导致代码阅读性变差,并且可能导致代码难以调试和容易出错,尤其是在宏展开时。5 j6 T# \1 m$ Y
4. 指针运算/ V4 P3 }: d# s/ L
直接操作指针进行算术运算,如 p++ ,效率有时是比较高的,但一定一定要注意在进行指针运算时,指针的运算范围限定,一不小心使用不当,极有可能会造成内存访问错误。' m4 r5 f3 e2 q! l
5. goto语句$ I4 h8 }: O7 y( s* ?
goto 语句可以跳转到程序的任意位置,这个跳转可以任意操作并且会忽略一大段逻辑结构代码,虽然很多错误处理都使用goto,但在业务逻辑设计时建议慎用,这会很容易破坏代码的结构化,使得代码难以阅读和维护。" j5 u) k( I+ u. N$ ~
6. 未使用的代码; y1 f: B# p1 R
代码中如果存在大量未使用的变量和函数,这可能会导致混淆和不必要的编译警告,并且会让后期的代码维护变得复杂和困难,建议代码提交的时候,把不必要的代码进行注释屏蔽或者直接删除。+ [8 n% f# ?# ~; f: m6 d
7. C语言中的布尔类型滥用
) c  R$ q3 |5 R6 b6 |很多 C 语言程序员喜欢用整型值 0 和 1 用作布尔值,用数字 0 表示 false,用数字 1 表示 true,而不是使用 _Bool 类型,这在以前旧的 C 语言语法里面很常见,但建议还是使用 bool 关键字进行变量定义。
5 _$ z) C( v/ b) U0 ~8. 不安全的字符串操作  v- e# p5 W# Q8 Q: f' D) ^
使用 strcpy 或 strcat 等不安全的字符串函数,这样可能会导致缓冲区溢出,因为这类字符串操作函数不会检查缓冲区的大小,它们会直接操作到字符串的 ‘\0’ 直至结束。
3 E# {  k! R3 Y8 N3 M; C9. 不检查函数返回值
( ]6 z* ]$ F* K$ R对于返回错误信息的函数,不检查其返回值可能导致程序在遇到错误时继续执行。我们有时候为了省事和方便,会有意无意地忽略函数或模块的返回值,但有时候,返回值包含了丰富的函数执行信息。
: f; [* A3 X8 r9 C3 |% E! w& h' o# I10. 不使用const关键字" J! p. i+ B$ _0 h
对于不应该被修改的变量不使用 const 关键字,这可能导致意外修改和难以发现的错误。在变量传参或初始化定义时,对于一些不再被修改的变量,建议使用 const 关键字,告诉程序员和编译器,该变量在使用时不会再被修改。& V0 Z  p& c* R7 Y& K) q: i
这些只是一些简单的举例,但并不是绝对禁止使用。实际上,是否使用某些语法还应该取决于具体的编程环境和业务需求。
2 }3 |, \* y% k% M( c1 B+ y有些规范在当时可能是最佳的解决方案,但随着业务和技术的发展,更好的替代方案也可能随之出现.
6 a8 Q0 J5 r+ E0 a1 J在实际编程中,应该尽量遵循最佳的编程实践和代码规范,以提高代码的质量和可维护性。
$ ?5 p9 O4 y: N, W9 \! S+ N-END-" N* O" A9 E6 d; Q6 X& x- F, r7 W
往期推荐:点击图片即可跳转阅读
* w/ J$ ^: R# m5 f3 B+ T                                                       
" \6 p* r7 t: g  N. @                                                               
$ R1 ?# y3 Q2 P( p4 V' Y9 t                                                                       
) S: |' G( u4 W2 n) i# p4 o                                                                                5 w& a( A  X2 B. ^

phifwgcmtao6403644105.jpg

phifwgcmtao6403644105.jpg
- X3 o3 V3 t" H2 t1 l9 |
                                                                               
& o& i' M+ N4 G6 J4 Y9 H$ e/ n/ q5 [                                                                                        看了嵌入式大佬的日常工作,真的,我大写一个【服】字!
) f6 w) m) O0 C; s: ?( J                                                        4 O/ x3 z1 |# F, N- C
                                                               
" [& ?0 W1 h1 {9 }7 v  P/ ~                                                                        * A  j& u* Q5 ^# R. Z' C
                                                                               
* B  d* M$ N* a" D# Y

r22qtmgex1m6403644205.jpg

r22qtmgex1m6403644205.jpg

- w8 h3 C4 \- ?% n+ V+ `' W0 h                                                                                2 }# \2 G8 r7 `4 T
                                                                                        哔!你写的嵌入式 C 语言代码,短路啦!
& R/ \6 l# e/ Q% c: E& b                                                               
1 Z1 N8 U+ ~) o( c2 u7 b9 K                                                                       
. A5 H0 d; x% e: I                                                                               
% G: l5 r% F& L

zx2nc24sqyw6403644305.jpg

zx2nc24sqyw6403644305.jpg
1 x; v3 ^3 L  ]" f$ M" S. O/ [9 {
                                                                                + ?/ a8 Z$ u2 N" U* g
                                                                                        嵌入式软件,写代码之前,真的不需要进行软件架构设计吗?) b! C: b7 I& T
                                                                               
! `0 D4 V3 g! ]                                                                        8 f9 S3 T: Z" \
                                                                * [6 {5 E+ ^3 V8 I% G, N
                                                        我是老温,一名热爱学习的嵌入式工程师
1 o. v- x: m5 [关注我,一起变得更加优秀!
8 b/ E6 s8 V# Y) O8 C

ej4bzwdfiy56403644406.png

ej4bzwdfiy56403644406.png
回复

使用道具 举报

发表回复

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

本版积分规则


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