deprecated

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Schlüsselwörter alphabetisch - Index


Hinweis: Dieses Feature ist nur für den klassischen bcc32-Compiler, nicht für den modernen durch Clang erweiterten Compiler verfügbar.

Syntax

<entity declaration> [[deprecated]]

oder

<entity declaration> [[deprecated("message")]]

Beschreibung

Mit dem Attribut deprecated kennzeichnen Sie Ihre benutzerdefinierten Konstrukte als veraltet. Ein solches Konstrukt ist überholt, kann durch ein besseres ersetzt werden, sollte nicht weiter verwendet werden, oder könnte zukünftig nicht mehr unterstützt werden.

Wenn ein veraltetes Konstrukt gefunden wird, wird die Warnung W8111 Zugriff auf veraltete Entität %s (C++) ausgegeben. Die Warnung wird für alle veralteten Entitätstypen ausgegeben, auch für Variablen.

Die zweite Form der Syntax ermöglicht Benutzer, eine Meldung in der Warnung auszugeben. Die Meldung empfiehlt in der Regel, dass ein neueres Konstrukt verwendet werden soll.

Hinweis: Das Attribut deprecated wird nicht für C++-Audits unterstützt. Verwenden Sie stattdessen die vordefinierten Makros _DEPRECATED_ATTRIBUTE0 und _DEPRECATED_ATTRIBUTE1.

Alle Beispiele gehen davon aus, dass die als deprecated deklarierten Entitäten, auch im Quelltext verwendet werden. Ansonsten wird keine Warnung ausgegeben

Die folgenden Konstrukte unterstützen das Attribut deprecated:

Aufzählungen

enum myEnum [[deprecated]] { e0, e1, e2 };
myEnum e = e1; //W8111 Accessing deprecated entity 'myEnum'

Globale Funktionen/Variablen

int x [[deprecated]];
void myFunc(int, int) [[deprecated("use myFunc(int,double) instead")]] {
}
void myFunc(int, double){
}

//...
myFunc(3,3); //W8111 Accessing deprecated entity 'myFunc(int,int)' use myFunc(int,double) instead

Klassen/Strukturen

class A [[deprecated]] {
} a0; //Warning

struct B [[deprecated]] {
} b0; //Warning
class C : A{
}

//...
C c0; //W8111 Accessing deprecated entity 'A'
Hinweis: Eine Warnung wird ausgegeben, wenn auf die Klasse/Struktur zugegriffen wird, in diesem Fall, wenn die Klasse/Struktur instantiiert wird. Ein veralteter Vorfahre gibt auch eine Warnung aus.

Methoden und Felder

class A{
 public:
  int m_x [[deprecated]];
  int m_y [[deprecated]];
  A(int x, double y){}
  A(int x, int y) [[deprecated("use the A(int,double) constructor")]]{} //W8111 Accessing deprecated entity 'A::A(int,int)' use the A(int,double) constructor
} a0(5,6);

//...
A a1(5,1.0);//No warning
a1.m_x=5; //W8111 Accessing deprecated entity 'A::m_x'
Hinweis: In diesen Fällen enthält die Warnung den Klassennamen vor dem Member-Namen.

Template-Klassen

template <class T> class A  {
 public:
  template <class T> class B  [[deprecated]] {};
};

//...
A<int>::B<double> a0; //W8111 Accessing deprecated entity 'A<int>::B<double>'
Hinweis: Wenn beim Compilieren von Delphi-Komponenten und bei Übersetzung der Unit in C++ (Erzeugung von .hpp-Dateien) einige Konstrukte in der Original-Unit als "deprecated" gekennzeichnet sind, werden sie auch in der .hpp-Datei als "deprecated" markiert.

Beispiel:

In SysUtils.hpp:

 class PASCALIMPLEMENTATION EStackOverflow [[deprecated]] : public EExternal

Portabilität

POSIX Win32 Win64 ANSI C ANSI C++

deprecated

+

Hinweis: Das Attribut deprecated wird nicht für durch Clang erweiterte C++-Compiler unterstützt. Siehe Workaround für C++11-Attribute (Durch Clang erweiterte C++-Compiler).

Siehe auch