如何在一个已弃用的函数中添加字符串或消息

3

我有一个函数叫做void foo()。我将其作为旧函数弃用:

void foo()__attribute__ ((deprecated));

新功能:

void FOO();

现在我想在旧函数中添加一条消息:"新函数使用的是FOO",这条消息可以与编译代码后得到的警告消息一起查看。
如何实现此功能。

-Wall添加到编译器命令中? - Iharob Al Asimi
如果您对答案满意,请接受其中一个答案(即投票计数器下方的勾选)。否则请更新问题。谢谢! - Jiří Pospíšil
3个回答

3
您可以使用[[deprecated(msg)]]属性,这也是一种标准的方式(自C++14起)实现此功能。
[[deprecated("do not use")]]
void f()
{}

int main(){

f();
}
clang++ 的输出结果:
warning: 'f' is deprecated: do not use [-Wdeprecated-declarations]
f();
^
note: 'f' has been explicitly marked deprecated here
void f()
     ^
1 warning generated.

g++的输出:

In function ‘int main()’:
warning: ‘void f()’ is deprecated (declared at test.cpp:2): do not use [-Wdeprecated-declarations]
 f();
 ^
warning: ‘void f()’ is deprecated (declared at test.cpp:2): do not use [-Wdeprecated-declarations]
 f();

3
您可以在属性本身内指定消息(自GCC 4.5以来)。
void __attribute__ ((deprecated("the new function used is FOO"))) foo();

或者你可以使用新语法(C++14)

[[deprecated("the new function used is FOO")]]
void foo();

1
如果您正在使用C++14,可以使用以下语法:

If you're using C++14, you can use this syntax:

[[deprecated("Replaced by FOO, which has extra goodness")]]
void foo();

请注意,您只能使用字符串字面量作为消息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接