C,弃用结构成员的可移植方式

标签 c struct

使用 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/

相关文章:

c - 如何从 C 运行外部程序并解析其输出?

c++ - usleep 与 clock_gettime() 问题

c++ - EXEC SQL LOB WRITE APPEND 与轮询(先写、下写、最后写)

c - 如何制作#define 函数的循环?

ios - 核心数据 : How to correctly use migratePersistentStore to create a backup copy

c++ - 当 malloc() 相同的结构时,如何在结构中使用 C++ 字符串?

c - 为什么我的结构和数组不起作用?

c++ - 有没有办法在结构中存储日期和时间? C++

pointers - Go树遍历,试图看懂代码

c - "struct user* "和 "struct user *"有什么区别?