C-Attribut: deprecated (seit C23)
Gibt an, dass der Name oder die Entität, die mit diesem Attribut deklariert wurde, veraltet ist, d. h. die Verwendung ist erlaubt, aber aus irgendeinem Grund nicht erwünscht.
Inhalt |
[bearbeiten] Syntax
[[ deprecated ]][[ __deprecated__ ]] |
(1) | ||||||||
[[ deprecated ( string-literal ) ]][[ __deprecated__ ( string-literal ) ]] |
(2) | ||||||||
| string-literal | - | Text, der verwendet werden kann, um die Begründung für die Veraltung zu erklären und/oder eine ersetzende Entität vorzuschlagen |
[bearbeiten] Erklärung
Gibt an, dass die Verwendung des mit diesem Attribut deklarierten Namens oder der Entität erlaubt, aber aus irgendeinem Grund nicht erwünscht ist. Compiler geben typischerweise Warnungen bei solchen Verwendungen aus. Der string-literal, falls angegeben, ist normalerweise in den Warnungen enthalten.
Dieses Attribut ist in Deklarationen der folgenden Namen oder Entitäten erlaubt
- struct/union: struct [[deprecated]] S;,
- typedef-name: [[deprecated]] typedef S* PS;,
- Objekte: [[deprecated]] int x;,
- struct/union-Mitglied: union U { [[deprecated]] int n; };,
- Funktion: [[deprecated]] void f(void);,
- Aufzählung: enum [[deprecated]] E {};,
- Aufzählungswert: enum { A [[deprecated]], B [[deprecated]] = 42 };.
Ein Name, der als nicht veraltet deklariert wurde, kann als veraltet neu deklariert werden. Ein Name, der als veraltet deklariert wurde, kann nicht durch eine Neudeklaration ohne dieses Attribut als nicht veraltet deklariert werden.
[bearbeiten] Beispiel
#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(); }
Mögliche Ausgabe
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.[bearbeiten] Siehe auch
| C++ Dokumentation für deprecated
|