deprecated pragma

deprecatedpragma を使用して、今後のリリースでサポートされない、または使用が推奨されない関数、型、その他の識別子を示すことができます。

Note

C++14 [[deprecated]] 属性に関する情報と、Microsoft __declspec(deprecated) 修飾子または deprecatedpragma の代わりにその属性を使用する場合に関するガイダンスについては、「C++ の属性」をご覧ください。

構文

#pragma deprecated(identifier1 [ ,identifier2 ... ] )

解説

コンパイラは、deprecatedpragma によって指定された識別子を検出すると、コンパイラの警告 C4995 を発行します。

マクロ名の使用を避けることができます。 マクロ名を引用符で囲んで配置します。そうしないと、マクロ展開が発生します。

deprecatedpragma はすべての一致する識別子に対して機能し、署名を考慮しないため、オーバーロードされた関数の特定のバージョンを非推奨にするための最適なオプションではありません。 スコープ内に該当し、一致する関数名は、すべて警告をトリガーします。

可能な場合、deprecatedpragma の代わりに、C++14 [[deprecated]] 属性を使用することをお勧めします。 Microsoft 固有の __declspec(deprecated) 宣言修飾子も、多くの場合に deprecatedpragma よりも適切な選択肢です。 [[deprecated]] 属性と __declspec(deprecated) 修飾子を使用して、オーバーロードされた関数の特定形式に対し、非推奨のステータスを指定できます。 診断警告は、属性または修飾子が適用される特定のオーバーロードされた関数への参照にのみ表示されます。

// pragma_directive_deprecated.cpp
// compile with: /W3
#include <stdio.h>
void func1(void) {
}

void func2(void) {
}

int main() {
   func1();
   func2();
   #pragma deprecated(func1, func2)
   func1();   // C4995
   func2();   // C4995
}

次のサンプルでは、クラスの使用を避ける方法を示します。

// pragma_directive_deprecated2.cpp
// compile with: /W3
#pragma deprecated(X)
class X {  // C4995
public:
   void f(){}
};

int main() {
   X x;   // C4995
}

関連項目

pragma ディレクティブと __pragma および _Pragma キーワード