Атрибут C: устаревший (с C23)
Указывает, что имя или сущность, объявленная с этим атрибутом, устарела, то есть её использование разрешено, но не рекомендуется по какой-либо причине.
Синтаксис
[[ deprecated ]][[ __deprecated__ ]] | (1) | |
[[ deprecated ( строковая константа ) ]][[ __deprecated__ ( строковая константа ) ]] | (2) |
| строковая константа | - | текст, который можно использовать для объяснения обоснования устаревания и/или для предложения заменяющей сущности |
Объяснение
Указывает, что использование имени или сущности, объявленной с этим атрибутом, разрешено, но не рекомендуется по какой-либо причине. Компиляторы обычно выдают предупреждения при таком использовании. Строковая константа, если указана, обычно включается в предупреждения.
Этот атрибут разрешен в объявлениях следующих имён или сущностей:
- struct/union:
struct [[deprecated]] S;, - имя typedef:
[[deprecated]] typedef S* PS;, - объекты:
[[deprecated]] int x;, - член struct/union:
union U { [[deprecated]] int n; };, - функция:
[[deprecated]] void f(void);, - перечисление:
enum [[deprecated]] E {};, - перечислитель:
enum { A [[deprecated]], B [[deprecated]] = 42 };.
Имя, объявленное как не устаревшее, может быть повторно объявлено как устаревшее. Имя, объявленное как устаревшее, не может быть сделано не устаревшим путём повторного объявления без этого атрибута.
Пример
#include <stdio.h>
[[deprecated]]
void TriassicPeriod(void)
{
puts("Triassic Period: [251.9 - 208.5] million years ago.");
}
[[deprecated("Use NeogenePeriod() instead.")]]
void JurassicPeriod(void)
{
puts("Jurassic Period: [201.3 - 152.1] million years ago.");
}
[[deprecated("Use calcSomethingDifferently(int).")]]
int calcSomething(int x)
{
return x * 2;
}
int main(void)
{
TriassicPeriod();
JurassicPeriod();
}Возможный вывод:
Triassic Period: [251.9 - 208.5] million years ago.
Jurassic Period: [201.3 - 152.1] million years ago.
prog.c:23:5: warning: 'TriassicPeriod' is deprecated [-Wdeprecated-declarations]
TriassicPeriod();
^
prog.c:3:3: note: 'TriassicPeriod' has been explicitly marked deprecated here
[[deprecated]]
^
prog.c:24:5: warning: 'JurassicPeriod' is deprecated: Use NeogenePeriod() instead. [-Wdeprecated-declarations]
JurassicPeriod();
^
prog.c:9:3: note: 'JurassicPeriod' has been explicitly marked deprecated here
[[deprecated("Use NeogenePeriod() instead.")]]
^
2 warnings generated.См. также
Документация C++ для deprecated |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/attributes/deprecated