deprecated

De Appmethod Topics
Aller à : navigation, rechercher

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


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 pris en charge 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 Object Pascal, quand l'unité est traduite en C++ (et génère ainsi des 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 les .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 pris en charge les compilateurs C++ améliorés par Clang. Voir Solution pour les attributs C++0x (Compilateurs C++ améliorés par Clang).

Voir aussi