电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

459

主题

459

帖子

918

积分

二级会员

Rank: 2

积分
918
发表于 6 天前 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师
+ h' x1 m3 _! l- M* [关注我,一起变得更加优秀!
. v4 g& R8 `9 a3 L$ B5 @% x3 A: e什么?嵌入式 C 语言也会有短路现象?+ k8 b  N+ R% M' c" r; }; D
是的,你没看错。* |) C( P9 W, h3 H
在嵌入式 C 语言开发过程中,短路算是比较普遍的现象,这些都是很常见的语法基础,但如果程序员稍有不注意,就会“莫名奇妙”地引入bug。! ~9 z/ k! k. d9 e7 U5 t5 R
有时候,我们可以通过一些编程上的规范,去避开这些稍有不慎就引入bug的地方,但最关键的,还是要打好 C 语言实践的基础。
, j* S4 i  {+ C& F4 i% f下面的例子虽然比较简单,但如果后面是其他表达式,或许你并不会那么容易分辨。8 \4 [  c9 {8 R& E( K/ }, A
有时候,你可能会斩钉截铁地说,我绝对不会编写这样的代码,但你不太好确定你的同事不会这样写,以及还有已经离职的前同事,把“祖传代码”交到你手上的时候,。。。3 h* s2 _1 O" a, ?. S3 [; s

jjwwa3uygib640471140.jpg

jjwwa3uygib640471140.jpg
. S- \. M7 B7 f" w1 E
下面的案例来源于网络,仅供参考:- @+ ]' L% d( ?2 L2 w7 z( ~
萝卜坑 1, L! Y# o  d( S1 J* m4 t5 D( j
短路现象:
  • //只有a为真(非0)才需要判断b的值; //只有a和b都为真,才需要判断c的值。  a && b && c + H3 e: z8 r* |( `/ G$ y/ A
    举例:
  • //求最终a、b、c、d的值://因为a++是先判断a的值再自加,而a初始值为0, 所以(a++)为假,//由短路现象可知&&后面式子b++和--c就都不会执行;//对于赋值语句,是先将a的值赋值给d,然后再自加,//所以d的值为0,a最终为1。
    ' [" D1 r  O$ h1 p" kmain(){   int a,b,c,d;    a = 0;  b = 1;  c = 2;   d = a++ && b++ && --c;    printf("a=%d b=%d c=%d d=%d
    & v  P+ C6 d7 n3 I",a,b,c,d);}  r$ f( p) ~! q  t$ p8 E
    执行结果:
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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