C++ 用__attribute__((deprecated(message)))管理废弃API

__attribute__ ((visibility(“default“))) 的作用 _attribute__ 是 GCC 编译器(及兼容编译器如 Clang)提供的一种扩展语法特性,用于为代码中的变量、函数、类型、结构体等元素附加特定属性,以指导编译器在编译、链接或运行时的行为。其核心作用是精细化控制代码的底层特性,常见用途如下:符号可见性控制作用:控制符号(函数、变量)在动态库(如 .so 文件)中的可见性。场景:动态库开发中隐藏内部实现,避免符号冲突。内存对齐优化作用:指定变量或结构体的内存对齐方式,提升性能或满足硬件要求。 阅读详情

__attribute__((deprecated(message)))可用于管理废弃API函数或者变量,同时保留其兼容性

#include <iostream>

#define MY_DEPR(message) __attribute__((deprecated(message)))

MY_DEPR("Please use test_fun2() instead.")
int test_fun(){

    return 0;
}

int test_fun_2(){

    return 0;
}

MY_DEPR("Please use class B instead.")
class A{};
class B{};

int main(int argc, char**argv){
    test_fun();
    A a;
    return 0;
}

result(输出一些警告信息,并提示需要更换的API或者类型):
deprecated.cpp:17:7: warning: attribute ignored in declaration of ‘class A’ [-Wattributes]
 class A{};
       ^
deprecated.cpp:17:7: note: attribute for ‘class A’ must follow the ‘class’ keyword
deprecated.cpp: In function ‘int main(int, char**)’:
deprecated.cpp:20:14: warning: ‘int test_fun()’ is deprecated: Please use test_fun2() instead. [-Wdeprecated-declarations]
     test_fun();
              ^
deprecated.cpp:6:5: note: declared here
 int test_fun(){

扩展:

// 在opencv中可以这样使用
#if defined __GNUC__
    #define __CV_GPU_DEPR_BEFORE__
    #define __CV_GPU_DEPR_AFTER__ __attribute__ ((deprecated))
#elif defined(__MSVC__) //|| defined(__CUDACC__)
    #pragma deprecated(DevMem2D_)
    #define __CV_GPU_DEPR_BEFORE__ __declspec(deprecated)
    #define __CV_GPU_DEPR_AFTER__
#else
    #define __CV_GPU_DEPR_BEFORE__
    #define __CV_GPU_DEPR_AFTER__
#endif
C++11 Attributes:统一代码属性语法,提升可移植性与表达力 在C++编程中,编译器扩展(如GCC的__attribute__和MSVC的__declspec)长期存在,导致代码可移植性差。C++11引入的Attributes(属性)机制,通过标准化的[[...]]语法,为代码实体(函数、变量、类型等)附加元信息,实现了跨编译器的一致行为。其核心原理是为编译器提供结构化提示,辅助优化和静态检查。这一机制的技术价值在于提升代码的健壮性、清晰度和可维护性,例如[[nodiscard]]防止返回值被忽略,[[maybe_unused]]优雅抑制警告。在工程实践中,Attri 阅读详情

相关推荐

GCC/Clang __attribute__ 详解:内存对齐、性能优化与嵌入式开发实战

在C/C++系统编程中,编译器优化与内存布局控制是提升程序性能与稳定性的关键技术。通过编译器指令,开发者可以精细指导代码生成过程,例如指定数据结构的内存对齐方式以适配硬件访问特性,或为函数添加优化提示以提升执行效率。这些技术在高性能计算、嵌入式系统及底层驱动开发中具有重要价值,能够有效解决缓存伪共享、非对齐访问崩溃等实际问题。本文以GCC/Clang的__attribute__扩展为核心,深入解析aligned、packed、hot、section等关键属性的工作原理,并结合内存池设计、固件模块化等实战场景

weixin_33851429的博客 399

__attribute__((deprecated)) 函数属性

代码版本升级时,将 API 重命名了,那么当程序中还在使用旧的 API 名称时就会产生警告,提示用户使用新的 API。如果使用了 deprecated 属性修饰的函数,则编译器必须生成警告。如果未使用该属性修饰的函数则不会产生任何警告。1、此函数属性指示存在某个函数,产生了警告,提示该函数已经废弃。

tyustli 941

【AI开源】Understand-Anything 完整使用教程(2026最新版)

Understand-Anything是一款基于交互式知识图谱的AI学习与开发平台,能够将代码库转化为可视化知识结构,支持语义搜索、上下文问答和全流程开发。核心功能包括代码知识图谱化、AI辅助学习和多编码代理集成。支持TypeScript/JavaScript、Python等多种语言,要求Node.js 20+和16GB以上内存。提供NPM、Docker和源码三种安装方式,支持增量更新和团队知识共享。与同类产品相比,在交互式图谱、语义搜索和AI集成方面更具优势。适用于代码学习、大型项目维护和团队协作等场景。

与时俱进,开放共享 7215

__attribute__((used)) __attribute__((section(x)))

1、通知编译器在目标文件中保留一个静态函数,即使它没有被引用。 2、标记为attribute__((used))的函数被标记在目标文件中,以避免链接器删除未使用的节。 3、静态变量也可以标记为used,方法是使用 __attribute__((used))。 4、例程 static int lose_this(int); static int keep_this(int) __attribute__((used)); // retained in object file static int ke

EmbeddedCoder 的优快云博客 2万+

从零到一:基于DESeq2的转录组差异表达分析实战指南

本文详细介绍了基于DESeq2的转录组差异表达分析实战指南,涵盖数据准备、标准化处理、差异分析及结果解读等关键步骤。DESeq2凭借其稳定性和对低表达基因的友好处理,成为转录组数据分析的首选工具。文章还提供了常见问题排查和优化建议,帮助研究者高效完成从分析到发表的完整流程。

weixin_26759093的博客 272

产品经理如何运用AI提升工作效率

AI技术的应用为产品经理的工作流程带来了显著的效率提升。从需求收集到产品上线,AI可以在多个阶段提供智能化支持,帮助产品经理更好地理解用户需求、优化产品设计、提高开发和测试效率。在未来,随着AI技术的不断发展,产品经理将能够更加高效地管理产品生命周期,为用户提供更优质的产品体验。应用 | AI + 千行百业欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

不想宅的冷同学 1336

C++ 关键字 deprecated

指示声明有此属性的名字或实体被,即允许但因故不鼓励使用。利用 deprecated声明,可以将函数重载的特殊形式指定为已弃用,而 pragma 形式适用于函数名称的所有重载形式。利用 deprecated声明,可以指定在编译时显示的消息。该消息的文本可以来自宏。只能使用 deprecatedpragma 将宏标记为已弃用。

人无远虑,必有近忧 8608

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

用__attribute__((deprecated))管理过时的代码

用__attribute__((deprecated))管理过时的代码

许振坪的专栏 1万+

基于结构的虚拟筛选模型 gnina 从源码编译

所需要的软件安装包: 安装 CUDA 装的时候看着点,第二个要你装驱动的选择,回答N,不装。 sudo sh cuda_10.0.130_410.48_linux.run sudo vim ~/.bashrc 在 ~/.bashrc 文件最后加上 export PATH=/usr/bin:/usr/local/cuda-10.0/bin${PATH} export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH} source ~

周迪新的博客 3188

最适合入门的100个深度学习项目

本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 12万+

神奇的__attribute__

注:本文转载至https://www.jianshu.com/p/6153eccdbe62 本教程大部分内容对C++适用 __attribute__是GNU C特色之一,在iOS用的比较广泛。如果你没有用过,那系统库你总用过,在Foundation.framework中有很多地方用到__attribute__特性。__attribute__ 可以设置函数属性(Function Attribu...

jcShan709的博客 529

5G Multicast/Broadcast Services(MBS) (七) MBS广播DRX

当处于RRC_IDLE或RRC_INACTIVE或RRC_CONNECTED 状态时,如果为 G-RNTI 配置了broadcast DRX,则允许MAC entity使用broadcast DRX 操作不连续地监听此G-RNTI的PDCCH;此 G-RNTI 的 drx-onDurationTimerPTM 或 drx-InactivityTimerPTM 正在运行的时间,也就是。long DRX周期drx-LongCycle-PTM和drx-StartOffset-PTM定义DRX周期开始的子帧。

asd199086的博客 391

[转载]用__attribute__((deprecated))管理过时的代码

定义:http://www.keil.com/support/man/docs/armcc/armcc_chr1359124981701.htm__attribute__((deprecated)) variable attributeThe deprecated variable attribute enables the declaration of a deprecated variable...

好久都没有更新博客喽,工作原因只能总结在内部机上:-( 4002

【YOLOv11改进- 主干网络】YOLOv11+RepViT: 从ViT的角度重新审视Mobile的CNN助力YOLOv11有效涨点;

本文给大家带来的改进内容是在YOLOv11中更换主干网络为RepViT,助力YOLOv11有效涨点,论文通过集成轻量级 ViT 的高效架构设计,逐步增强了标准轻量级 CNN(即 MobileNetV3)的移动友好性。这最终产生了一个新的纯轻量级 CNN 系列的主干网络。

qq_41304809的博客 785

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++14 deprecated属性详解:语法、实战与编译器控制

在C++编程中,代码的长期维护和API的平滑演进是软件工程的核心挑战。C++14标准引入的`[[deprecated]]`属性,正是为了解决这一问题而设计的编译期特性。其原理是通过在声明时标记程序实体(如函数、类、变量),在使用时触发编译器警告,从而在不破坏现有代码的前提下,为开发者提供明确的迁移指引。这一机制的技术价值在于平衡了向后兼容性与技术债务清理,使得大型代码库能够有序迭代。在应用场景上,它广泛用于API版本管理、跨平台代码的条件编译标记、以及团队内部的知识传承。本文聚焦于`[[deprecated

weixin_34049948的博客 554

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

如何使用C++14弃用属性[[deprecated]]:优雅标记过时代码的终极指南

C++14引入的`[[deprecated]]`属性是现代C++开发中管理代码生命周期的重要工具,它允许开发者清晰标记过时的函数、类或其他代码单元,同时提供友好的迁移提示。本文将详细介绍这一特性的使用方法和最佳实践,帮助你在项目中优雅地处理代码演进。 ### 什么是[[deprecated]]属性? `[[deprecated]]`是C++14标准引入的属性(attribute)机制,用于标记

gitblog_00661的博客 553

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++14 deprecated标记工程实践:从语法到团队协作的代码生命周期管理

在软件工程中,代码生命周期管理是确保项目长期可维护性的核心环节。C++14标准引入的[[deprecated]]属性为标记过时代码提供了统一机制,其原理是通过编译器在编译阶段对使用已弃用实体的代码发出警告,而非直接阻断构建。这一机制的技术价值在于实现了渐进式重构,为团队提供了从旧接口迁移到新接口的缓冲期,有效降低了大规模代码变更带来的风险。在应用场景上,它广泛应用于库API演进、架构升级、性能优化替代等需要平滑过渡的软件迭代过程。本文聚焦于C++项目中deprecated标记的工程化实践,深入探讨了如何避免

weixin_34095889的博客 369

Sphinx 废弃 API 完全指南:废弃策略、RemovedInSphinxXXWarning 机制与全量迁移清单

本文是 Sphinx 扩展开发者与深度用户必读的 API 兼容性手册。它围绕 [doc/extdev/deprecated.rst](https://link.gitcode.com/i/f4565d542de5289f8db314d9f7cdddaf) 展开,系统讲解 Sphinx 的废弃(deprecation)策略、`RemovedInSphinxXXWarning` 警告机制,并完整呈现截

gitblog_00663的博客 205

C++17 关键新特性介绍及代码讲解 (5) — attributes for namespaces and enumerators

一句话概括: 在定义 、时,允许指定 attributes。 这里的 attributes 指: 具体所使用的C++编译器所提供的语言扩展属性。gcc 提供的 attributes : 参见 [gcc Attribute Syntax]clang 提供的 attributes : 参见 [Clang 15.0.0git documentation ATTRIBUTES IN CLANG]在定义 时,我们可以单独为每个 enumerator 指定 attributes, 比如 : 上面代码中, attribu

kenneth_yu的博客 1187

别再只写控制台程序了!用Dev-C++ 5.11手把手教你打包自己的C++工具库(.a文件)

本文详细介绍了如何使用Dev-C++ 5.11构建C++静态链接库(.a文件),帮助开发者将分散的代码片段转化为可复用的工具库。通过实战指南和工程化思维,提升代码维护效率和版本一致性,适用于个人工具集合的开发与优化。

weixin_30945039的博客 334

C++14核心特性解析:从C++11的完善到现代编程实践

在C++编程语言的发展历程中,类型推导和泛型编程是提升代码表达能力和安全性的关键技术。类型推导通过auto和decltype等机制,允许编译器自动推断变量或表达式的类型,减少冗余代码并增强可读性。其原理基于编译时的类型系统分析,能够在保证类型安全的前提下简化语法。这一技术的价值在于提高开发效率,减少因手动类型声明导致的错误,并支持更灵活的模板元编程。在实际应用中,类型推导广泛用于STL算法、lambda表达式和容器操作等场景。C++14在此基础上进一步强化了泛型编程能力,引入了泛型lambda和变量模板等特

weixin_33709364的博客 301

cocos2d-X 导演类(Director.h)API

本文来自http://blog.youkuaiyun.com/runaying ,引用必须注明出处! cocos2d-X 导演类(Director.h)API #ifndef __CCDIRECTOR_H__ #define __CCDIRECTOR_H__ #include "platform/CCPlatformMacros.h" #include "cocoa/CCObject.h" #in

runaying的专栏 2760

C++17核心属性解析:maybe_unused、nodiscard、fallthrough在嵌入式开发中的实战应用

在C++编程中,编译器警告和静态检查是提升代码质量、减少潜在错误的关键机制。C++17标准引入了[[maybe_unused]]、[[nodiscard]]和[[fallthrough]]这三个核心属性,旨在以标准化方式表达程序员意图,增强代码自文档化能力。[[maybe_unused]]用于抑制因条件编译、API兼容性等合理场景产生的“未使用实体”警告;[[nodiscard]]强制调用者处理重要返回值,将资源泄漏、状态不一致等错误从运行时提前至编译期;[[fallthrough]]则为switch语句中

WGH100817的博客 405

C++17入门

C++17 入门 语言核心:结构化绑定简化多值返回;强制拷贝省略优化对象构造;if constexpr 实现编译时分支;折叠表达式优雅处理参数包;CTAD 与推导指引简化模板实例化。类型安全容器:std::optional 表示可选值;std::variant 提供类型安全联合;std::any 支持类型擦除的动态值。工具库:string_view 实现非拥有字符串视图;filesystem 提供跨平台文件操作。性能增强:并行算法通过执行策略等等

Yusei_0523的博客 1461
上一篇: C++随机数生成
下一篇: PCL中的八叉树
一杯盐水
博客等级 码龄10年 62粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值