2010-03-25 15 views
5

Estoy intentando hacer que mi proyecto se compile bajo GCC (Visual Studio lo compila sin problemas).GCC, Unicode y __FUNCTION__

Tengo una función de afirmación personalizada que arroja un mensaje wstring. Una parte de ella es la macro _ _FUNCTION__, que "unicodize" usando la macro se ensanchan desde MSDN

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

Se compila correctamente en MSVC, pero imprime esto en GCC:

error: ‘L__FUNCTION__’ was not declared in this scope 

El único La solución con la que podría venir es convertir el contenido de __FUNCTION __ a wstring en tiempo de ejecución usando mbstowcs, pero me gustaría encontrar una forma de compilación para hacerlo.

Gracias por la ayuda.

+0

Debería publicar su macro '__FUNCTION__'. – Gabe

+1

Pensé que es provisto automáticamente por las compilaciones, al menos MSVS lo expone automáticamente. Ni siquiera me permitirá ir a la definición, así que no sé cómo se define. –

Respuesta

5

En GCC __FUNCTION__ es una extensión no estándar. Para citar: GCC Online Docs

En GCC 3.3 y anteriores, en C solamente, __FUNCTION__ y __PRETTY_FUNCTION__ fueron tratados como literales de cadena; ellos se podrían usar para inicializar matrices char , y podrían concatenarse con otros literales de cadena. GCC 3.4 y más tarde los trata como variables, como __func__. En C++, __FUNCTION__ y __PRETTY_FUNCTION__ siempre han sido variables.

Así adición de L en la parte frontal de __FUNCTION__ es sólo va a convertirlo en L__FUNCTION__ que es probablemente indefinido.

+1

Entonces, ¿supongo que la conversión en tiempo de ejecución es la única manera? –

+0

Así que lo hice en tiempo de ejecución. Gracias por responder. –

+0

¿Por qué diablos cambiaron eso? Me parece que siempre los trato porque los literales de cadena serían mucho más útiles. – antred