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

【水下小目标检测】SWIPENet与样本重加权:应对模糊与噪声的深度学习策略

本文深入探讨了水下小目标检测的挑战与解决方案,重点介绍了SWIPENet网络架构与IMA样本重加权算法。通过空洞卷积模块、特征金字塔重构和多尺度预测机制,SWIPENet有效提升了模糊目标的检测精度。结合Invert Multi-Class Adaboost算法,系统性地解决了水下环境中的样本不均衡问题,在URPC数据集上实现了48.8%的mAP,特别适合海洋生物检测等应用场景。

weixin_29057163的博客 344

__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万+

二次开发vba_CATIA VBA(VBS)二次开发:使用Search批量选择元素

在CATIA二次开发中很多在程序中进行自动交互的方法或函数都需要使用选择集作为参数,将几何元素按照要求批量添加到选择集中也是实现程序自动运行的有效方法。在前面的文章《CATIA使用VBA(VBS)二次开发时用户的交互选择》和《CATIA使用VBA(VBS)二次开发时工程图和草图位置的交互选择函数Indicate2D》中介绍了在CATIA VBA(VBS)二次开发中用户和选择集之间的交互操...

weixin_32497403的博客 1321

经典算法之——解决全排列问题以及详解

回溯”指的是“状态重置”,可以理解为“恢复现场”,是在编码的过程中,是为了节约空间而使用的,而在递归或者深度优先中根据需要的场合来配合回溯法可以进一步对自己的代码进行优化。, n-1, n},方向都为向左。邻位对换法是全排列生成算法中的其中一种,它的换位是双向的,通过保存数字的“方向性”来快速得到下一个排列。最后以 3 开头的全排列为[3, 1, 2], [3, 2, 1];以 1 开头的全排列为[1, 2, 3], [1, 3, 2];以 2 开头的全排列为[2, 1, 3], [2, 3, 1];

m0_68987535的博客 8794

C++ 关键字 deprecated

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

人无远虑,必有近忧 8608

老服务器焕新记:在Dell R730上折腾Nvidia K80显卡的完整记录(含Anaconda环境配置)

本文详细记录了在Dell R730服务器上为Nvidia K80计算卡安装驱动、配置CUDA及Anaconda环境的完整过程。文章重点解决了老旧硬件与CentOS 7系统的兼容性问题,提供了从BIOS设置、驱动版本精准匹配到Python机器学习环境搭建的实战指南,旨在帮助读者低成本挖掘旧服务器的GPU计算潜力。

weixin_29197835的博客 503

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

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

许振坪的专栏 1万+

目标检测 RT-DETR(2023)详细解读

在使用了这个技巧后,显然训练过程中,类别的标签不再是此前的0和1离散值,而是0~1的连续值。关于 Query Selection(查询向量选择),大家应该并不陌生,这个方法可谓在DETR领域大杀四方,如DAB-DETR对查询向量进行重构理解,将其解释为Anchor,DN-DETR通过查询降噪来应对匈牙利匹配的二义性所导致的训练时间长的问题,DINO提出从Encoder中选择Top-k特征进行学习等一系列方法,这都无疑向我们证明,查询向量很重要,选择好的Query能够让我们事半功倍。在RT-DETR中,

qq_51352130的博客 5869

华为eNSP实战:手把手教你配置DHCP全局地址池(含AP固定IP分配)

本文通过华为eNSP模拟器,详细演示了如何配置DHCP全局地址池,为不同业务VLAN动态分配IP地址,并重点讲解了如何通过MAC地址绑定为接入点(AP)分配固定IP。文章涵盖了从拓扑设计、基础网络搭建到地址池精细配置、验证测试及常见故障排查的全流程,是网络工程师掌握企业级DHCP部署与AP管理的实用指南。

weixin_29235923的博客 599

神奇的__attribute__

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

jcShan709的博客 529

【数据同化第一期】基本概念介绍

【数据同化第一期】基本概念介绍

WW、forever的博客 1904

[转载]用__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

从代码仓库到知识库:自动化构建与RAG技术实践

在软件工程领域,代码库的规模与复杂性日益增长,如何高效管理和利用其中的知识成为关键挑战。传统文档工具主要依赖注释提取API信息,而现代知识构建技术则通过抽象语法树(AST)解析、自然语言处理等手段,深入理解代码结构、调用关系和业务逻辑。其核心价值在于将非结构化代码转化为机器可理解、可检索的结构化知识,显著提升代码资产的可维护性和团队协作效率。这一过程通常涉及代码解析、信息提取、向量化表示和存储索引四个关键阶段,其中向量化技术将代码语义转化为高维向量,为语义搜索奠定基础。结合检索增强生成(RAG)架构,开发者

weixin_42545292的博客 413

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

weixin_34049948的博客 554

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

gitblog_00661的博客 553

VC中sqlite的使用

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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、付费专栏及课程。

余额充值