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

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

3天内不再提示

深入探索GCC的attribute属性

学益得智能硬件 来源:学益得智能硬件 2025-02-13 10:05 次阅读

如果经常看Linux源码,一定会见过 attribute 属性,他在 Linux 里面出现的很多。

attribute 是 gcc 的扩展功能,它不属于标准C语言

使用 attribute 可以修饰变量、函数或者数据类型的属性,属性有很多,有些确实很有用。

找了几个可以修饰函数的属性,供大家参考下。

如果希望函数可以在 main 函数前面执行,可以用 constructor 属性,就是构造的意思。

如果希望函数可以在 main 函数之后执行,可以用 destrucotr 属性,有点析构的意思。

网上有些介绍使用这两个属性来模拟 C++ 的构造函数和析构函数,说实话,这比 C++ 里面的构造和析构差远了,用它来给程序做些初始化、回收的操作,还是可以的。

第二个,nonnull。

写函数的时候,我们经常对函数做入参判断,比如防止传进来的参数是空指针,导致程序下面出现异常。

使用 nonnull 属性,可以让编译器来判断。如果传进来的参数是 NULL,编译的时候会提示警告,非常的人性化。

第三个,deprecated。

如果想把某个函数废弃掉,比如在项目的后续版本中不再使用,可以使用 deprecated 属性,加上这个属性,如果你还是使用这个函数,编译就会提示警告。

比如常见的 gets 函数,如果一下子把它从标准库中删掉,对以前的程序不够友好,所以只能提醒。

第四个,noreturn。

对于不会返回的函数,可以使用 noreturn 属性。注意,返回值是 void 类型和函数不返回是两码事,这样的代码编译会提示警告。

如果在函数内部加上死循环或者退出,这样的函数才属于不返回。

第五个,weak,用于定义弱函数。

比如在一个文件中定义了弱函数,另一个文件完全可以重新再定义一遍,并且编译器会自动链接到用户定义的新函数上。

weak 属性在 STM32 上面出现的很多,比如中断函数等等。

gcc 扩展的属性很多,打开 gcc 文档,粗略的估算了一下,可能有百来个。

可能是C语言也发现了这些属性好用,在最新的C23标准里面,也加入了属性这个概念,不过用法很奇葩,使用两个嵌套的中括号,而且目前支持的属性也比较少。

编译器一直都是走在标准的前面,也许在接下来的某个C语言标准中,会有更多的 gcc 属性加入到C语言中。

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

    关注

    87

    文章

    11385

    浏览量

    211634
  • GCC
    GCC
    +关注

    关注

    0

    文章

    109

    浏览量

    25041

原文标题:gcc的attribute属性,确实值得学习

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    BSP36 gcc_11.3.0编译错误的原因?怎么解决?

    在 Yocto 项目中构建 BSP36 时遇到 gcc_11.3.0 编译错误。 详细日志如下: [i]/usr/src/debug/gcc/11.3.0-r0/build/gcc
    发表于 03-27 08:19

    S32K312无法使用int_sram_shareable SRAM存储数据怎么解决?

    到int_sram_no_cacheable分区__attribute__((section(“.int_sram_no_cacheable”)))gcc 关键字。 我想在 int_sram_shareable int_dtcm 部分
    发表于 03-27 07:16

    ubuntu24.04上安装gcc工具链出现报错怎么解决?

    虚拟机安装的ubuntu24.04.1,默认gcc版本13,从芯来官网下载了对应的gcc版本的工具链,到最后编译报错: riscv64-unknown-linux-gnu-gcc: fatal
    发表于 03-07 12:39

    运行230-yolov8优化笔记本示例时遇到ops.scale_segments问题怎么解决?

    运行 230-yolov8 优化 示例应用程序。 遇到错误:属性错误: module \'ultralytics.yolo.utils.ops\' has no attribute \'scale_segments\'
    发表于 03-06 06:10

    Meta组建四大专研小组,深入探索DeepSeek模型

    近日,据报道,脸书母公司Meta为了提升其大模型Llama的性能,专门成立了四个研究小组,深入探索量化巨头幻方量化旗下的国产大模型DeepSeek的工作原理。 据悉,Meta组建的这四个小组各有侧重
    的头像 发表于 02-05 14:02 284次阅读

    全球计算联盟GCC成立,安谋科技牵头编写白皮书发布

    1月10日,由全球计算联盟(简称“GCC”)主办的“2025全球计算大会——全球计算联盟启航大会”在深圳举行。大会期间,同步举办了全球计算联盟(GCC)成立庆典,并在随后的年度系列成果发布仪式上
    发表于 01-13 14:55 87次阅读
    全球计算联盟<b class='flag-5'>GCC</b>成立,安谋科技牵头编写白皮书发布

    Chart FX-使用API传输数据 使用Value属性传输数据

    有时,向 Chart FX 传输数值数据最简单方便的方法就是使用 Value 属性。通过 Value 属性,您可以为图表中特定series中的某一point设置数值。 Value 属性需要你希望自动
    的头像 发表于 01-09 16:30 219次阅读
    Chart FX-使用API传输数据 使用Value<b class='flag-5'>属性</b>传输数据

    MSP430 GCC用户指南

    电子发烧友网站提供《MSP430 GCC用户指南.pdf》资料免费下载
    发表于 12-05 14:51 0次下载
    MSP430 <b class='flag-5'>GCC</b>用户指南

    常用编辑器之GCC编译器

    GCC(GNU Compiler Collection)是由GNU开发的编程语言编译器,最初是作为GNU操作系统的编译器编写的。GCC是一个编译器套件,包含很多软件包,支持多种语言编译。GCC的官网
    发表于 08-24 11:05

    锡焊原理解析:深入理解电子产品制造的核心工艺

    探索焊接技术在精密电子工程中的重要性和创新,从基础元件的连接到现代焊接技术的进展,深入了解焊接材料的选择与焊接技术的分类。本文提供了对锡焊原理的深入分析,揭示了高质量电子产品制造的关键因素。
    的头像 发表于 08-12 15:03 1029次阅读
    锡焊原理解析:<b class='flag-5'>深入</b>理解电子产品制造的核心工艺

    OpenAI正深入探索文本水印技术的前沿领域

    8月5日最新资讯透露,OpenAI正积极投身于文本水印技术的尖端探索,但与此同时,公司也坦诚地指出了这一创新领域所面临的艰巨技术障碍与未解之谜。
    的头像 发表于 08-05 12:59 662次阅读

    __attribute__((weak)) __weak_symbol在idf4.4库中无效的原因?

    请教下,在编译时,遇到几个问题: 1.同一个工程中,在不同的C文件写相同的函数,编译时不报错,函数生效随机; 2.使用__attribute__((weak)) __weak_symbol无效。 请教下,__attribute__((weak)) __weak_symbo
    发表于 06-17 08:31

    鸿蒙ArkTS声明式开发:跨平台支持列表【无障碍属性】 通用属性

    组件可以设置相应的无障碍属性和事件来更好地使用无障碍能力。
    的头像 发表于 06-11 17:30 557次阅读
    鸿蒙ArkTS声明式开发:跨平台支持列表【无障碍<b class='flag-5'>属性</b>】 通用<b class='flag-5'>属性</b>

    云知声携手耘途教育成立云知学院福建分院,探索智慧教育新思路

    近日,云知声与耘途教育联合成立云知学院福建分院,深入探索智慧教育新模式、新思路。
    的头像 发表于 05-11 15:52 663次阅读
    云知声携手耘途教育成立云知学院福建分院,<b class='flag-5'>探索</b>智慧教育新思路

    【大语言模型:原理与工程实践】探索《大语言模型原理与工程实践》2.0

    《大语言模型“原理与工程实践”》是关于大语言模型内在机理和应用实践的一次深入探索。作者不仅深入讨论了理论,还提供了丰富的实践案例,帮助读者理解如何将理论知识应用于解决实际问题。书中的案例分析有助于
    发表于 05-07 10:30