deprecated

De RAD Studio
Aller à : navigation, rechercher

Remonter à Liste alphabétique des mots clés - Index


Remarque: Cette fonctionnalité est uniquement disponible pour le compilateur bcc32 traditionnel (elle n'est pas disponible pour le compilateur moderne amélioré par Clang.

Syntaxe

<entity declaration> [[deprecated]]

ou

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

Description

Utilisez l'attribut deprecated pour indiquer que vos constructions sont désapprouvées. Une construction désapprouvée est ancienne ou obsolète, peut être remplacée par un meilleur substitut, n'est pas censée être utilisée ou risque de ne plus être prise en charge à l'avenir.

Si une construction désapprouvée est trouvée, un avertissement W8111 Accès à l'entité désapprouvée %s (C++) est déclenché. L'avertissement est déclenché pour tout type d'entité désapprouvée, notamment les variables d'un type désapprouvé.

La seconde forme de la syntaxe permet aux utilisateurs de générer un message dans l'avertissement. Le message recommande généralement la nouvelle construction qui doit être utilisée.

Remarque: L'attribut deprecated n'est pas supporté pour les audits C++. Utilisez à la place les macros prédéfinies _DEPRECATED_ATTRIBUTE0 et _DEPRECATED_ATTRIBUTE1.

Le message d'avertissement est affiché si l'entité déclarée comme désapprouvée est utilisée dans le code, sinon il n'est pas affiché.

Les constructions qui prennent en charge l'attribut deprecated sont les suivantes :

Enumérations

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

Fonctions globales/Variables

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

Classes/Structures

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

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

//...
C c0; //W8111 Accessing deprecated entity 'A'
Remarque: Un avertissement est déclenché quand la classe/structure est accédée ; dans ce cas, quand la classe/structure est instanciée. Un ancêtre désapprouvé génère aussi un avertissement.

Méthodes et champs

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'
Remarque: Dans ces cas, l'avertissement génère le nom de la classe avant le nom du membre.

Classes template

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>'
Remarque: Lors de la compilation de composants Delphi, quand l'unité est traduite en C++ (génération de fichiers .hpp), si certaines constructions sont marquées comme désapprouvées dans l'unité d'origine, elles sont aussi marquées comme désapprouvées dans le .hpp.

Exemple

Dans SysUtils.hpp :

 class PASCALIMPLEMENTATION EStackOverflow [[deprecated]] : public EExternal

Portabilité

POSIX Win32 Win64 ANSI C ANSI C++

deprecated

+

Remarque: L'attribut deprecated n'est pas supporté par les compilateurs C++ améliorés par Clang. Voir Solution pour les attributs C++11 (Compilateurs C++ améliorés par Clang).

Voir aussi