将库中的函数标记为已弃用

Cha*_*les 4 c gcc deprecated deprecation-warning

我正在开发一个扩展现有库的C 项目(通过标准includes)。随着库的开发,许多功能已被弃用。但是,这仅在文档中显示;代码不会以任何方式标记此状态。

每当我尝试使用这些已弃用的函数之一时,我想让我的项目警告我,特别是因为该库正在积极开发中,所以我可能在弃用之前使用了某些东西,而在其状态发生变化时却没有注意到。有什么办法可以在 gcc 下做到这一点,而不是修改库代码本身?(一方面,它经常变化,以致保留具有 gcc 属性的本地版本是不切实际的。)

这可能吗?似乎 Visual Studio 可以用它的

#pragma deprecated(X,Y,...)
Run Code Online (Sandbox Code Playgroud)

语法,但我认为 gcc 不支持这个,只是

__attribute__ ((deprecated))
Run Code Online (Sandbox Code Playgroud)

在函数声明本身上。

Mar*_*erg 5

从工作项目中提取

#ifdef __GNUC__
#define DEPRECATED(X) X __attribute__((deprecated))
#elif defined(_MSC_VER)
#define DEPRECATED(X) __declspec(deprecated) X
#else
#define DEPRECATED(X) X
#endif
Run Code Online (Sandbox Code Playgroud)

请参阅http://msdn.microsoft.com/en-us/library/dabb5z75.aspxhttp://msdn.microsoft.com/en-us/library/044swk7y.aspx

然后

DEPRECATED(void foo(int a, int b, int c));
Run Code Online (Sandbox Code Playgroud)

  • 为什么不?只要您正确地获取了原型,它就应该可以正常编译并且没有警告。为了验证我刚刚在 MSVC(使用`/W3`)和 gcc(使用`-Wall -Wextra`)中尝试过这个。您可以根据需要多次声明函数,只要它们保留相同的存储类和参数 (2认同)