2010-03-25 16 views
5

Sto cercando di compilare il mio progetto in GCC (Visual Studio lo compila in modo impeccabile).GCC, Unicode e __FUNCTION__

Ho una funzione di asserzione personalizzata che genera un messaggio wstring. Una parte di esso è il _ _FUNCTION__ macro, che ho "unicodize" utilizzando la macro si allargano da MSDN

#define WIDEN2(x) L ## x 
#define WIDEN(x) WIDEN2(x) 

Si compila bene in MSVC, ma esso stampa questo GCC:

error: ‘L__FUNCTION__’ was not declared in this scope 

L'unica La soluzione che potrei avere è convertire i contenuti di __FUNCTION __ in wstring su runtime usando mbstowcs, ma mi piacerebbe trovare un modo di compilazione per farlo.

Grazie per l'aiuto.

+0

Dovresti pubblicare la tua macro '__FUNCTION__'. – Gabe

+1

Ho pensato che sia fornito automaticamente dalle compilazioni, almeno MSVS lo espone automaticamente. Non mi permetterà nemmeno di andare alla definizione, quindi non so come sia definito. –

risposta

5

In GCC __FUNCTION__ è un'estensione non standard. Per citare: GCC Online Docs

Nel GCC 3.3 e versioni precedenti, in C solo, __FUNCTION__ e __PRETTY_FUNCTION__ sono stati trattati come stringhe letterali; è possibile utilizzare per inizializzare gli array char e potrebbero essere concatenati con altri valori letterali stringa. GCC 3.4 e successivamente trattarli come variabili, come __func__. In C++, __FUNCTION__ e __PRETTY_FUNCTION__ sono sempre state variabili .

Quindi, aggiungendo L sulla parte anteriore del __FUNCTION__ è solo andare a trasformarlo in L__FUNCTION__ che probabilmente è indefinito.

+1

Quindi suppongo che la conversione di runtime sia l'unico modo? –

+0

Quindi l'ho fatto in modo runtime. Grazie per la risposta. –

+0

Perché diamine hanno cambiato quello ?? Mi sembra sempre trattarli come stringhe letterali sarebbe molto più utile. – antred