deprecated

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Schlüsselwörter alphabetisch - Index


Syntax

<entity declaration> [[deprecated]]

oder

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

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 ist für C++-Audits nicht unterstützt. Sie sollten stattdessen die Verwendung der vordefinierten Makros _DEPRECATED_ATTRIBUTE0 und _DEPRECATED_ATTRIBUTE1 in Betracht ziehen.

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 Zugriff auf veraltete Entität '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 Zugriff auf veraltete Entität 'myFunc(int,int)' verwenden Sie stattdessen myFunc(int,double)

Klassen/Strukturen

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

//... 
C c0; //W8111 Zugriff auf veraltete Entität '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 Zugriff auf veraltete Entität 'A::A(int,int)' verwenden Sie den Konstruktor A(int,double) 
} a0(5,6);
 
//... 
A a1(5,1.0);//Keine Warnung 
a1.m_x=5; //W8111 Zugriff auf veraltete Entität '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 Zugriff auf veraltete Entität 'A<int>::B<double>'

Hinweis: Wenn beim Compilieren von Object Pascal-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 von C++-Compilern, die durch Clang erweitert wurden, nicht unterstützt. Siehe Workaround für C++0x-Attribute (Durch Clang erweiterte C++-Compiler).

Siehe auch