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

    文章

    19461

    浏览量

    231413
  • 编译器
    +关注

    关注

    1

    文章

    1642

    浏览量

    49336
收藏 人收藏

    评论

    相关推荐

    什么样的代码会被编译器优化

    现在的编译器有多智能,可能你辛辛苦苦写的代码,在编译器看来就是几句废话,直接被删除掉。
    的头像 发表于 01-16 16:38 209次阅读

    Triton编译器与GPU编程的结合应用

    Triton编译器简介 Triton编译器是一种针对并行计算优化的编译器,它能够自动将高级语言代码转换为针对特定硬件优化的低级代码。Triton编译器的核心优势在于其能够识别并行模式,
    的头像 发表于 12-25 09:13 360次阅读

    Triton编译器如何提升编程效率

    现代软件开发中,编译器扮演着至关重要的角色。它们不仅将高级语言代码转换为机器可执行的代码,还通过各种优化技术提升程序的性能。Triton 编译器作为一种先进的编译器,通过多种方式提升
    的头像 发表于 12-25 09:12 369次阅读

    Triton编译器在高性能计算中的应用

    高性能计算(High-Performance Computing,HPC)是现代科学研究和工程计算中不可或缺的一部分。随着计算需求的不断增长,对计算资源的要求也越来越高。Triton编译器作为一种
    的头像 发表于 12-25 09:11 424次阅读

    Triton编译器的优化技巧

    现代计算环境中,编译器的性能对于软件的运行效率至关重要。Triton 编译器作为一个先进的编译器框架,提供了一系列的优化技术,以确保生成的代码既高效又适应不同的硬件架构。 1. 指令
    的头像 发表于 12-25 09:09 367次阅读

    Triton编译器的优势与劣势分析

    Triton编译器作为一种新兴的深度学习编译器,具有一系列显著的优势,同时也存在一些潜在的劣势。以下是对Triton编译器优势与劣势的分析: 优势 高效性能优化 : Triton编译器
    的头像 发表于 12-25 09:07 460次阅读

    Triton编译器在机器学习中的应用

    1. Triton编译器概述 Triton编译器是NVIDIA Triton推理服务平台的一部分,它负责将深度学习模型转换为优化的格式,以便在NVIDIA GPU上高效运行。Triton编译器支持
    的头像 发表于 12-24 18:13 548次阅读

    Triton编译器支持的编程语言

    Triton编译器支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译器通过Python接口提供了对Triton语言和编译器的访问,使得用户可以在Python环境中
    的头像 发表于 12-24 17:33 490次阅读

    Triton编译器与其他编译器的比较

    Triton编译器与其他编译器的比较主要体现在以下几个方面: 一、定位与目标 Triton编译器 : 定位:专注于深度学习中最核心、最耗时的张量运算的优化。 目标:提供一个高度抽象、灵活、高效
    的头像 发表于 12-24 17:25 520次阅读

    Triton编译器功能介绍 Triton编译器使用教程

    Triton 是一个开源的编译器前端,它支持多种编程语言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一个可扩展和可定制的编译器框架,允许开发者添加新的编程语言特性和优化技术
    的头像 发表于 12-24 17:23 724次阅读

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

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

    AI编译器技术剖析

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

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

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

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

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

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

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