2010-03-25 5 views
5

J'essaie de compiler mon projet sous GCC (Visual Studio le compile parfaitement). J'ai une fonction assert personnalisée qui envoie un message wstring. Une partie de celui-ci est le _ _FUNCTION__ macro que je "unicodize" en utilisant le Widén macro de MSDNGCC, Unicode et __FUNCTION__

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

Il compile bien dans MSVC, mais il imprime ceci dans GCC:

error: ‘L__FUNCTION__’ was not declared in this scope 

La seule La solution que je pourrais utiliser est de convertir le contenu de __FUNCTION __ en wstring à l'exécution en utilisant mbstowcs, mais je voudrais trouver un moyen de le faire à la compilation.

Merci pour votre aide.

+0

Vous devriez publier votre macro '__FUNCTION__'. – Gabe

+1

Je pensais que c'est automatiquement fourni par les compiles, au moins MSVS l'expose automatiquement. Cela ne me permettra même pas d'aller à la définition, donc je ne sais pas comment cela est défini. –

Répondre

5

Dans GCC __FUNCTION__ est une extension non standard. Pour citer: GCC Online Docs

Dans GCC 3.3 et plus tôt, en C seulement, __FUNCTION__ et __PRETTY_FUNCTION__ ont été traités comme des chaînes; ils pourraient être utilisés pour initialiser char tableaux, et ils pourraient être concaténés avec d'autres littéraux de chaîne. GCC 3.4 et plus tard les traiter comme des variables, comme __func__. En C++, __FUNCTION__ et __PRETTY_FUNCTION__ ont toujours été été variables.

Ainsi ajoutant L à l'avant __FUNCTION__ va tout simplement transformer en L__FUNCTION__ qui est probablement non définie.

+1

Donc je suppose que la conversion d'exécution est le seul moyen? –

+0

Donc, je l'ai fait le temps d'exécution. Merci de répondre. –

+0

Pourquoi diable ont-ils changé cela ?? Il me semble toujours les traiter comme des littéraux de chaîne serait beaucoup plus utile. – antred