C++ &引用;不赞成;太阳和#x27的符号;s C++;编译程序?
Sun编译器是否有标记将函数标记为不推荐使用的函数,如GCC的C++ &引用;不赞成;太阳和#x27的符号;s C++;编译程序?,c++,deprecated,suncc,C++,Deprecated,Suncc,Sun编译器是否有标记将函数标记为不推荐使用的函数,如GCC的\uuuuu属性((不推荐))或MSVC的\uuu declspec(不推荐)?这将在Sun上显示带有“+w”标志的编译器警告,或在GCC上显示带有“-Wall”标志的编译器警告。不幸的是,它破坏了函数的ABI兼容性;我还没有找到解决这个问题的办法 #define DEPRECATED char=function_is_deprecated() inline char function_is_deprecated() { r
\uuuuu属性((不推荐))
或MSVC的\uuu declspec(不推荐)
?这将在Sun上显示带有“+w”标志的编译器警告,或在GCC上显示带有“-Wall”标志的编译器警告。不幸的是,它破坏了函数的ABI兼容性;我还没有找到解决这个问题的办法
#define DEPRECATED char=function_is_deprecated()
inline char function_is_deprecated()
{
return 65535;
}
void foo(int x, DEPRECATED)
{
}
int main()
{
foo(3);
return 0;
}
输出:
CC -o test test.cpp +w
"test.cpp", line 7: Warning: Conversion of "int" value to "char" causes truncation.
"test.cpp", line 15: Where: While instantiating "function_is_deprecated()".
"test.cpp", line 15: Where: Instantiated from non-template code.
1 Warning(s) detected.
使用它的方式是,当您要声明一个已弃用的函数时,在其参数列表的末尾添加一个逗号,然后写入弃用的。它的工作方式是添加一个导致转换警告的默认参数(从而保留API)。似乎可以在任何支持
\warning
的编译器上工作的解决方案是:
- 将有问题的标题复制到新的升级标题名
- 从升级的头文件中删除不推荐使用的函数
- 添加到旧头文件:
#警告“此头已弃用。请使用{new header name}”