首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将C++标记为已弃用

将C++标记为已弃用
EN

Stack Overflow用户
提问于 2008-11-17 08:51:30
回答 3查看 101.6K关注 0票数 160

我的接口中有一个方法,我想用可移植的C++将其弃用。当我在谷歌上搜索这个的时候,我得到的只是一个微软特有的解决方案:#pragma deprecated__declspec(deprecated)

二等奖的解决方案是ifdef一个MSVC和一个GCC解决方案。

EN

回答 3

Stack Overflow用户

发布于 2008-11-17 10:09:41

这应该能起到作用:

代码语言:javascript
复制
#ifdef __GNUC__
#define DEPRECATED(func) func __attribute__ ((deprecated))
#elif defined(_MSC_VER)
#define DEPRECATED(func) __declspec(deprecated) func
#else
#pragma message("WARNING: You need to implement DEPRECATED for this compiler")
#define DEPRECATED(func) func
#endif

...

//don't use me any more
DEPRECATED(void OldFunc(int a, float b));

//use me instead
void NewFunc(int a, double b);

但是,如果函数返回类型的名称中有逗号,例如std::pair<int, int>,则会遇到问题,因为这将被预处理程序解释为将2个参数传递给已弃用的宏。在这种情况下,您必须对返回类型进行类型定义。

编辑:更简单(但可能不太兼容)版本的here

票数 131
EN

Stack Overflow用户

发布于 2008-11-17 09:11:43

在GCC中,您可以使用已弃用的属性声明函数,如下所示:

代码语言:javascript
复制
void myfunc() __attribute__ ((deprecated));

当在.c文件中使用该函数时,这将触发编译时警告。

你可以在http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html的“诊断指南”中找到更多信息。

票数 23
EN

Stack Overflow用户

发布于 2008-11-17 09:14:04

在处理可移植项目时,在某些情况下,您几乎不可避免地需要为一系列平台提供一段预处理的替代方案。#ifdef this #ifdef那个等等。

在这样的部分中,您可以很好地有条件地定义一种弃用符号的方法。我的偏好通常是定义一个“警告”宏,因为大多数工具链都支持自定义编译器警告。然后,您可以继续使用一个特定的警告宏,用于弃用等。对于支持专用弃用方法的平台,您可以使用该宏来代替警告。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/295120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档