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

    文章

    19265

    浏览量

    229686
  • 编译器
    +关注

    关注

    1

    文章

    1624

    浏览量

    49113
收藏 人收藏

    评论

    相关推荐

    HighTec C/C++编译器支持Andes晶心科技RISC-V IP

    汽车编译器解决方案领先供货商HighTec EDV-Systeme GmbH宣布其针对汽车市场的高度优化C/C++编译器支持Andes晶心科技的RISC-V IP。这项支持对汽车软件开发人员来说是一
    的头像 发表于 12-12 16:26 189次阅读

    分享关于编译器的科普

    源代码分析工具和IDE集成。GCC被构建成一个单一的静态编译器,这使得它非常难以被作为API并集成到其他工具中。 GCC比Clang支
    的头像 发表于 12-09 09:49 88次阅读

    MSP430优化C/C++编译器v21.6.0.LTS

    电子发烧友网站提供《MSP430优化C/C++编译器v21.6.0.LTS.pdf》资料免费下载
    发表于 11-08 14:57 0次下载
    MSP430优化C/C++<b class='flag-5'>编译器</b>v21.6.0.LTS

    ARM优化C/C++编译器 v20.2.0.LTS

    电子发烧友网站提供《ARM优化C/C++编译器 v20.2.0.LTS.pdf》资料免费下载
    发表于 11-07 10:46 0次下载
    ARM优化C/C++<b class='flag-5'>编译器</b> v20.2.0.LTS

    TMS320C6000优化C/C++编译器v8.3.x

    电子发烧友网站提供《TMS320C6000优化C/C++编译器v8.3.x.pdf》资料免费下载
    发表于 11-01 09:35 0次下载
    TMS320C6000优化C/C++<b class='flag-5'>编译器</b>v8.3.x

    C7000优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    C7000优化C/C++<b class='flag-5'>编译器</b>

    Keil编译器优化方法

    我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
    的头像 发表于 10-23 16:35 510次阅读
    Keil<b class='flag-5'>编译器</b>优化方法

    深入浅出系列之代码可读性

    ”,这是对我最大的鼓励。 一、老生常谈,到底啥是可读性 一句话:见名知其义。有人说好的代码必然有清晰完整的注释,我不否认;也有人说代码即注释,是代码简洁之道的最高境界,我也不否认。但我都不完全接受,如果照搬前者,有
    的头像 发表于 08-09 16:00 259次阅读

    AI编译器技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统编译器的功能,如将高级语言编写的源代码转换为机器可执行的代码,还融入了人工智能技术
    的头像 发表于 07-17 18:28 1621次阅读

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性、优化策略、适用范围以及技术复杂等方面。以下是对两者区别的详细探讨,旨在全面解析
    的头像 发表于 07-17 18:19 1838次阅读

    Meta发布基于Code Llama的LLM编译器

    近日,科技巨头Meta在其X平台上正式宣布推出了一款革命的LLM编译器,这一模型家族基于Meta Code Llama构建,并融合了先进的代码优化和编译器功能。LLM编译器的推出,标
    的头像 发表于 06-29 17:54 1491次阅读

    SEGGER编译器优化和安全技术介绍 支持最新C和C++语言

    SEGGER编译器是专门为ARM和RISC-V微控制设计的优化C/C++编译器。它建立在强大的Clang前端上,支持最新的C和C++语言功能。 除其他外,其主要功能包括: 1) 尺寸优化:通过调整
    的头像 发表于 06-04 15:31 1444次阅读
    SEGGER<b class='flag-5'>编译器</b>优化和安全技术介绍 支持最新C和C++语言

    C语言:嵌入式开发中的关键编译器角色

    嵌入式程序开发跟硬件密切相关,需要使用C语言来读写底层寄存、存取数据、控制硬件等,C语言和硬件之间由编译器来联系,一些C标准不支持的硬件特性操作,由编译器提供。
    发表于 04-26 14:53 612次阅读
    C语言:嵌入式开发中的关键<b class='flag-5'>编译器</b>角色

    QT开发学习笔记1(安装交叉编译器

    QT安装交叉编译器
    的头像 发表于 02-18 10:02 929次阅读
    QT开发学习笔记1(安装交叉<b class='flag-5'>编译器</b>)

    RL78系列的C编译器包数据手册

    电子发烧友网站提供《RL78系列的C编译器包数据手册.pdf》资料免费下载
    发表于 01-26 15:55 1次下载
    RL78系列的C<b class='flag-5'>编译器</b>包数据手册