重庆尚层装饰唯一官网 - 中国别墅装饰领军企业!

使用Chrome浏览器体验最佳页面显示效果

重庆尚层装饰

重庆尚层

首页

装修知识

公装知识

很反感的一种编码风格

公装知识

Voglass+DC

  • 很反感的一种编码风格

    网络预约

    文章来源

    尚层别墅装饰

    发布时间

    2017-07-16

    朋友新家85平,竟然做成了三房,不得不说现在的开发商真是牛掰啊,八十多平米就敢做三房,所以朋友说了,储物一定要多,柜子怎么做最省空间

          有些人编程,特别爱用宏定义,即使一些简单的逻辑操作,都要搞个宏摆在那里,甚至要钻很多层宏定义才能看到代码的庐山面目,令读代码的人苦不堪言。特别是,有些人还爱用连字符“##”,现在代码阅读工具都很智能,一个有定义的符号,鼠标移过去,就会显示该符号是怎么定义的,而连字符“##”却是把有定义的符号分隔成多段没定义的符号,代码中便充满了“未定义”的符号,又给阅读代码增添了麻烦。

        当然,宏定义、连字符“##”,都是相当有用的东西,用得好,能使代码简洁整齐易读,滥用的话,就适得其反。

        我们天天讲代码的可读性,但讲可读性之前,一定要弄清楚是谁在读代码?农民、会计、财务、作家、画家、建筑设计师等等等等人,是不会去读程序的,你怎么写他们也读不懂。读程序的,必定是程序员。代码是会说话的,他们会用程序员的语言说话!一些简单一句,直接写在程序里,让他们跟程序员直接对话,这样的代码,可读性最强。

        那么,程序员为什么读代码呢?无非两种原因:一是查错,二是学习。这两者,都需要完全读懂代码,遇到宏,绝大多数情况都是要钻进去看宏的本来面目的。

        程序员都代码,很多时候,烦恼不是读不懂代码,而是总要花很多时间去找代码究竟在哪里,比如要钻很多层宏定义,才能找到代码的本类面目,当找到你要读的宏的本来面目后,却又找不回原来的阅读点了。

     

        因用户需要,最近要移植djyos到Ti的DSP上,学习DSP编程。在官方提供的example中,又见到一种令人恶心的代码,一个简单的逻辑操作,嵌套了3层,而且还滥用连字符“##”,不得不发下牢骚。(见仁见智,喜欢这种风格的人,笑着就行,反正我不喜欢这种风格

    main.c里面,有这样的调用:

      CSL_FINST(sysRegs->PINMUX15,SYSCFG_PINMUX15_PINMUX15_11_8, GPIO0_12);

    其中,SYSCFG_PINMUX15_PINMUX15_11_8和GPIO0_12这两个符号,你是找不到的,因为CSL_FINST这个宏在在cslr.h中被定义为: #define CSL_FINST(reg, PER_REG_FIELD, TOKEN)                                     CSL_FINS((reg), PER_REG_FIELD, CSL_##PER_REG_FIELD##_##TOKEN) 哦,原来SYSCFG_PINMUX15_PINMUX15_11_8和GPIO0_12是要加上CSL_,组成CSL_SYSCFG_PINMUX15_PINMUX15_11_8_GPIO0_12才是一个有定义的符号。 你明白这个宏是干什么的了吗?我不明白,因为我还没有看到CSL_FINS是怎么定义的。 继续找,找到这个宏: #define CSL_FINS(reg, PER_REG_FIELD, val)                                       ((reg) = ((reg) & ~CSL_##PER_REG_FIELD##_MASK)                               | CSL_FMK(PER_REG_FIELD, val)) 才恍然大悟,原来CSL_FINST的功能,就是: reg = reg &(~msk) | val; 千辛万苦钻了这么多层宏定义,原来就是一些简单的逻辑操作。连字符"##",使问题变得更糟糕,如果你直接写CSL_SYSCFG_PINMUX15_PINMUX15_11_8_GPIO0_12,任何时候,想知道它的值,在source insight或者其他一些代码阅读工具上,鼠标放上去,立马会告诉你这个常量的值是=0x00000008u,有了##,你就悠着点慢慢找吧。首先要人工把连字符连起来的字符串,恢复出它的本来面目“CSL_SYSCFG_PINMUX15_PINMUX15_11_8_GPIO0_12”,然后在工程中查找符号“CSL_SYSCFG_PINMUX15_PINMUX15_11_8_GPIO0_12”的定义,才找到它的值是0x00000008u,当代码中有千百个这样的符号的时候,你知道什么叫痛苦的。     对于只有一两行代码的操作,只有在不同环境下有不同写法时,为了程序的通用性,才值得用宏定义去封装它。例如点亮的宏 LED_ON,不同板子LED所用的端口不一样,应用宏定义封装之。

    版权信息

    原创文章:尚层装饰 | 重庆尚层 | 别墅装饰 | 别墅设计 | 尚层官网 转载请注明,谢谢!

    文章标题:很反感的一种编码风格

    永久链接:http://cqshangceng.com/show-72-39214-1.html

约看工地
预约设计

家装计价

Voglass+DC

您的姓名:
联系电话:
楼盘名称:
房屋面积:

热门推荐

Voglass+DC

专题推荐

Voglass+DC

尚层故事

Voglass+DC