0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

现代编译器的可读性胜过调试

星星科技指导员 来源:嵌入式计算设计 作者:Colin Walls 2022-07-01 09:10 次阅读

编写代码时,您的首要任务应该是可读性。大量时间花在调试和维护代码上,通常远远超过最初编写代码所花费的时间。因此,使该过程高效是必不可少的。考虑到未来人类读者的需求(可能是你,当然!)比试图让代码“高效”更重要——这项工作主要可以留给现代编译器。

这种考虑意味着代码应该非常仔细地格式化和对齐,并且语言结构应该尽可能简单和透明。有许多已发布的指南可以帮助解决这些问题。但是,创建可读代码并不止于此。

当你编译代码时,编程语言被翻译成机器指令。这是显而易见的。然而,编译器实际接收的是一个字符流;有些是实际代码,但可能有一些不打算翻译的块,其他文本可能仅供人类使用:

文档——代码中的注释

临时删除的代码——调试过程的一部分,但它可能会持续存在

特殊调试/跟踪代码

每一个的实现都会对可读性产生一些影响。

文档

每个人都知道评论是个好主意,但我们大多数人都很懒惰。但是,一些努力是非常值得的。旧式/*.。.*/注释符号是可以接受的,但新的行尾//。..形式更清晰。仍然需要护理。例如:

int number; // input count

char c; // single character buffer

char buffer[99]; // the input line

很难跟上。对齐就是一切:

int number; // input count

char c; // single character buffer

char buffer[99]; // the input line

并且不要使用标签;它们不是便携式的。

临时代码删除

在软件开发过程中,想要对编译器“隐藏”部分代码——将其关闭——并不少见。执行此操作的传统方法是“注释掉”——在代码前加/* ,在后加*/。虽然做起来很快,但它很容易失效,因为编译器不一定支持注释嵌套。较新的//表示法稍微好一点,但应用和删除很繁琐,并且仍然容易出错。

实现此结果的最佳方法是使用预处理器指令,因此:

#if 0

#endif

Debug/Trace code

A particular kind of temporarily visible code is instrumentation – extra code added for debugging and/or tracing. Although modern debuggers and tracing tools can do a remarkable job, sometimes instrumenting the code is the only way to glean visibility and figure out exactly what is happening.

The usual way to accommodate this need is using pre-processor directives, as before, but using a symbol to switch them on and off:

#ifdef DEBUG_TRACE

#endif

So, when the symbol DEBUG_TRACE is defined, the debug code is included.

A slightly different approach is to code it like this:

#ifndef NDEBUG

#endif

Although this double negative does seem confusing, some consistency is introduced, as this symbol is used to enable the standard assert() macro. The symbol needs to be defined to suppress debug mode.

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18275

    浏览量

    222140
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48610
收藏 人收藏

    评论

    相关推荐

    编译器的优化选项

    这一点,需要了解编译器的能力和限制;第三,要了解硬件的运行方式,针对硬件特性进行优化。本文着重展开第二点和第三点。 简单认识编译器 要写出高性能的代码,首先需要对编译器有基础的了解,原因在于
    的头像 发表于 11-24 15:37 405次阅读
    <b class='flag-5'>编译器</b>的优化选项

    嵌入式开发中的C语言编译器设置

    编译器的语义检查很弱小,甚至还会“掩盖”错误。现代编译器设计是件浩瀚的工程,为了让编译器设计简单一些,目前几乎所有编译器的语义检查都比较弱
    发表于 10-11 12:43 280次阅读

    Keil修改ARM编译器及配置方法

    Keil MDK自 V5.36 版本之后,默认就不带 Arm Compiler V5版本编译器。如果需要使用 V5 版本编译器,就需要自己下载并安装。
    发表于 09-19 10:41 2194次阅读
    Keil修改ARM<b class='flag-5'>编译器</b>及配置方法

    用于嵌入式FUSA的ARM编译器移植和兼容指南

    《用于Embedded FUSA的ARM®编译器迁移与兼容指南》为从旧版本的ARM编译器迁移到用于Embedded FUSA 6的ARM编译器的用户提供迁移和兼容
    发表于 08-29 07:02

    如何安装ARM编译器Linux版

    。 注意:ARM编译器Linux版运行在64位ARM硬件上,它不是交叉编译器。 有关兼容的详细信息,请参阅支持的平台。
    发表于 08-28 06:45

    用于µVision版本5的ARM编译器v5.06入门指南

    ARM编译器符合ISO C、ISO C++、ELF、DWARF 2和DWARF 3标准。 每项标准的合规级别为: AR Armar生产和使用Unix风格的目标代码档案。 Armar可以列出和提取
    发表于 08-23 07:12

    ARM编译器5.06版迁移与兼容指南

    尽管不能保证不同版本的ARM编译器之间的兼容,但有一些方法可以帮助您实现兼容。 ARM编译器生成的代码符合ARM应用程序二进制接口(ABI)。 另外: ·对于C代码,ARM期望与早
    发表于 08-21 07:50

    ARM编译器for Embedded Version 6.20移植和兼容指南

    Arm®编译器嵌入式迁移和兼容指南为从旧版本的Arm编译器迁移到Arm编译器嵌入式6的用户提供迁移和兼容信息。
    发表于 08-10 07:17

    Arm编译器迁移和兼容指南

    Arm®编译器迁移和兼容指南为从旧版本的Arm编译器迁移到Arm编译器6的用户提供迁移和兼容信息。
    发表于 08-10 06:57

    ARM编译器错误和警告参考指南

    您可以使用命令行选项来控制编译器的诊断消息的严重生产。 编译器通常会警告潜在的可移植性问题和其他危险。 将遗留代码(例如,旧式C)移植到ARM®时编译器,许多警告可能是据报道。使用–
    发表于 08-08 06:00

    编译器的标准生命周期

    编译器的标准生命周期
    发表于 07-05 19:32 0次下载
    <b class='flag-5'>编译器</b>的标准生命周期

    Neuron 现场编译器用户指南

    Neuron 现场编译器用户指南
    发表于 07-04 20:47 0次下载
    Neuron 现场<b class='flag-5'>编译器</b>用户指南

    SDCC-Linux下的51 MCU编译器

    SDCC (小型设备C编译器)是为8位微控制器开发的免费C编译器。尽管兼容多种不同体系结构,但SDCC C编译器更适合8051内核。 SDCC是命令行固件开发工具,含预处理器、编译器
    的头像 发表于 06-16 15:19 3654次阅读

    峰会回顾第6期 | 毕昇编译器与OpenHarmony RISC-V生态的进展

    设计经验,负责探索先进软硬件协同设计技术、工具以及方法。   文章内 容来 源 第一届开放原子开源基金会OpenHarmony技术峰会——开发者工具分论坛   视频回顾   正 文 内 容   由C、C++、Java等高级语言编码的人类可读源代码需要通过编译器
    的头像 发表于 05-05 15:46 1128次阅读
    峰会回顾第6期 | 毕昇<b class='flag-5'>编译器</b>与OpenHarmony RISC-V生态的进展

    R32C/100系列C编译器包V.1.01 C编译器用户手册

    R32C/100系列C编译器包V.1.01 C编译器用户手册
    发表于 04-28 19:54 1次下载
    R32C/100系列C<b class='flag-5'>编译器</b>包V.1.01 C<b class='flag-5'>编译器</b>用户手册