使用GCC和Clang,您可以弃用struct成员(如下所示).
但是我没有看到为其他编译器(例如MSVC)执行此操作的方法.
虽然这不是C规范的一部分,并且很可能依赖于每个编译器的pragma或自定义扩展,但是能够在更广泛的编译器中支持它是有用的.
/* mytest.h */
#ifdef __GNUC__
# define ATTR_DEPRECATED __attribute__((deprecated))
#else
# define ATTR_DEPRECATED /* unsupported compiler */
#endif
struct Test {
int bar;
int foo ATTR_DEPRECATED;
};
Run Code Online (Sandbox Code Playgroud)
一旦成员被弃用,编译器应该在直接访问它时警告它的使用,例如:
#include "mytest.h"
static func(void)
{
Test t;
t.bar = 1;
t.foo = 0; /* <-- WARN ABOUT THIS AT COMPILE TIME */
}
Run Code Online (Sandbox Code Playgroud)
除了支持 GCC 的编译器__attribute__((deprecated))(例如 Clang)之外,MSVC 没有弃用结构成员的约定(使用 MSVC,您可以弃用标识符,但这适用于全局,而不仅仅是该结构)。
此外,还没有发布其他 C 编译器的其他约定。所以看起来这是 GCC 特有的。