电子产业一站式赋能平台

PCB联盟网

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

哔!你写的嵌入式 C 语言代码,短路啦!

[复制链接]

493

主题

493

帖子

1868

积分

三级会员

Rank: 3Rank: 3

积分
1868
发表于 2024-11-15 17:50:00 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师1 u: @# b3 W; l5 Q" h
关注我,一起变得更加优秀!
. n% s* H) d/ V2 E, f* B- u* T什么?嵌入式 C 语言也会有短路现象?
( U# f3 b' |0 C0 O3 q; |( s. r是的,你没看错。
; P) |/ c) l( ^9 |$ a/ p+ G在嵌入式 C 语言开发过程中,短路算是比较普遍的现象,这些都是很常见的语法基础,但如果程序员稍有不注意,就会“莫名奇妙”地引入bug。
: B- Y# _- m9 b, l* s9 J, S$ g有时候,我们可以通过一些编程上的规范,去避开这些稍有不慎就引入bug的地方,但最关键的,还是要打好 C 语言实践的基础。1 O+ }+ F8 s) A3 x
下面的例子虽然比较简单,但如果后面是其他表达式,或许你并不会那么容易分辨。
4 G) G2 p4 |8 k有时候,你可能会斩钉截铁地说,我绝对不会编写这样的代码,但你不太好确定你的同事不会这样写,以及还有已经离职的前同事,把“祖传代码”交到你手上的时候,。。。  k5 g9 u; u% \; \# ^7 R

jjwwa3uygib640471140.jpg

jjwwa3uygib640471140.jpg
" p& I% U1 H  d1 G; H
下面的案例来源于网络,仅供参考:' ]0 m* j$ ]' p# @0 e& v
萝卜坑 1
( \% Z2 u4 h: b# l3 {5 V. N
短路现象:
  • //只有a为真(非0)才需要判断b的值; //只有a和b都为真,才需要判断c的值。  a && b && c + g' w, Q1 _9 m. r! \! h3 w
    举例:
  • //求最终a、b、c、d的值://因为a++是先判断a的值再自加,而a初始值为0, 所以(a++)为假,//由短路现象可知&&后面式子b++和--c就都不会执行;//对于赋值语句,是先将a的值赋值给d,然后再自加,//所以d的值为0,a最终为1。
    ; m/ s- F" ?) z, T  V% rmain(){   int a,b,c,d;    a = 0;  b = 1;  c = 2;   d = a++ && b++ && --c;    printf("a=%d b=%d c=%d d=%d
    6 ~0 A( }. B6 N",a,b,c,d);}
    0 L4 `  Y+ O! R' e5 B6 r9 P, y  I执行结果:
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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