要在Visual Studio下将对象声明为C/C++中的弃用,您有三个解决方案:
#pragma deprecated(X)__pragma(deprecated(X))__declspec(deprecated(X))前两个是相同的,只是第二个可以在宏内部使用; 我把第一个只是为了完整性.第三个似乎是开发社区中使用最多的.
我想知道最后两个有什么区别.根据MSDN 在这里和这里的文档,我知道没有区别.在这种情况下,奇怪的是根据您正在使用的内容引发不同的警告代码:C4995用于pragma-case,C4996用于declspec-case.
那么有人知道是否存在实际差异(任何微小的差异),或者为什么这些指令不会引发相同的警告代码?
请参阅deprecated(C++):
(特定于Microsoft)除了下面提到的例外情况,已弃用的声明提供与已弃用的pragma相同的功能:
- 该弃用声明让你指定为推荐的函数重载的特殊形式,而形式附注适用于函数名称的所有重载形式.
- 该弃用声明让你指定一个消息将显示在编译的时候.消息的文本可以来自宏.
- 只能使用已弃用的pragma 将宏标记为已弃用.
对于#pragmavs. __pragma,请参阅Pragma指令和__Pragma关键字:
__pragma()关键字
微软具体
编译器还支持__pragma关键字,该关键字具有与#pragma指令相同的功能,但可以在宏定义中内联使用.
值得注意的是,正如@Deduplicator所提到的,C++ 14引入了该[[deprecated]]属性.
7.6.5不推荐使用的属性[dcl.attr.deprecated]
该属性令牌
deprecated可以用来标记的名称和它的使用仍然是允许的实体,但不鼓励出于某种原因.[ 注意:特别deprecated适用于被视为过时或不安全的名称和实体.- 结束说明 ]