3

Sun コンパイラには、GCC__attribute__ ((deprecated))や MSVC のように、関数を非推奨としてマークする表記法があり__declspec(deprecated)ますか?

4

2 に答える 2

2

サポートするコンパイラで機能する解決策の 1 つは、次の#warningようになります。

  • 問題のヘッダーを新しい昇格したヘッダー名にコピーします
  • プロモートされたヘッダー ファイルから非推奨の関数を削除します。
  • 古いヘッダー ファイルに追加します。#warning "This header is deprecated. Please use {new header name}"
于 2009-06-02T01:07:34.953 に答える
1

これにより、sun で「+w」フラグを使用した場合、または gcc で「-Wall」フラグを使用した場合に、コンパイラの警告が表示されます。残念ながら、関数の ABI 互換性が損なわれます。私はまだそれを回避する方法を発見していません。

#define DEPRECATED char=function_is_deprecated()

inline char function_is_deprecated()
{
    return 65535;
}

void foo(int x, DEPRECATED)
{
}

int main()
{
    foo(3);
    return 0;
}

出力:

CC -o test test.cpp +w
"test.cpp", line 7: Warning: Conversion of "int" value to "char" causes truncation.
"test.cpp", line 15:     Where: While instantiating "function_is_deprecated()".
"test.cpp", line 15:     Where: Instantiated from non-template code.
1 Warning(s) detected.

これを使用する方法は、関数が非推奨であることを宣言する場合です。パラメーター リストの最後にコンマを追加し、DEPRECATED と記述します。内部で動作する方法は、変換警告を引き起こすデフォルトの引数を追加することです (したがって、API を保持します)。

于 2009-05-21T17:15:09.223 に答える