使用 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;
};
一旦某个成员被弃用,如果直接访问它,编译器应该警告它的使用,例如:
#include "mytest.h"
static func(void)
{
Test t;
t.bar = 1;
t.foo = 0; /* <-- WARN ABOUT THIS AT COMPILE TIME */
}
最佳答案
除了支持 GCC 的 __attribute__((deprecated))
(例如 Clang)的编译器之外,MSVC 没有弃用结构成员的约定(使用 MSVC,您可以弃用标识符,但它适用于全局,不仅仅是那个结构)。
也没有发布其他 C 编译器的其他约定。所以看起来这是特定于 GCC 的。
关于C,弃用结构成员的可移植方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22823477/