Domanda

fa il compilatore Sun hanno una notazione per contrassegnare le funzioni come deprecato, come __attribute__ ((deprecated)) del GCC o __declspec(deprecated) di MSVC?

È stato utile?

Soluzione

Sembra che una soluzione in grado di lavorare su qualsiasi compilatore che supporta #warning potrebbe essere:

  • Copiare l'intestazione in questione ad un nuovo, nome di intestazione promossa
  • Rimuovi le funzioni deprecate dal file di intestazione promossa
  • Aggiungi al vecchio file di intestazione: #warning "This header is deprecated. Please use {new header name}"

Altri suggerimenti

Questo ti porterà un avviso del compilatore sul sole con il "+ w" bandiera o sul gcc con la bandiera "-Wall". Purtroppo si rompe la compatibilità ABI della funzione; Non ho ancora scoperto un modo per aggirare questo.

#define DEPRECATED char=function_is_deprecated()

inline char function_is_deprecated()
{
    return 65535;
}

void foo(int x, DEPRECATED)
{
}

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

L'output:

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.

Il modo in cui lo si utilizza è quando si vuole dichiarare una funzione obsoleta, si aggiunge una virgola alla fine della sua lista di parametri e scrivere deprecato. Il modo in cui funziona sotto il cofano è aggiunge un argomento di default (preservando così API) che causa l'avviso di conversione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top