6.7.13.5 deprecated 属性
约束
deprecated可用于以下声明:- 结构体
- 联合体
typedef名- 对象
- 结构体/联合体成员
- 函数
- 枚举
- 枚举项
若带参数子句,则形式必须是:
c
("string-literal")1
语义
deprecated用来标记“仍可使用,但不推荐继续使用”的名字或实体。典型原因包括:
- 即将废弃;
- 不安全;
- 不可靠;
- 已不适合当前用途。
若实现支持该属性,则:
c
__has_c_attribute(deprecated)1
应返回 202311L。
- 它也允许前后重声明混用;第一次带该属性后,该实体就被视为已标记。
推荐实践
若程序在带
deprecated声明之后又引用了该名字或实体,而该引用不处在“相关的已废弃上下文”内部,实现应给出诊断。若属性参数里给了字符串,诊断消息应包含这段说明文本。
标准示例特别强调:若整个函数或结构体本身也已
deprecated,那么在那个已废弃上下文内部再引用其他已废弃实体时,通常不再鼓励重复诊断。