GCC, Unicode и __FUNCTION__ - PullRequest
       12

GCC, Unicode и __FUNCTION__

5 голосов
/ 25 марта 2010

Я пытаюсь компилировать свой проект в GCC (Visual Studio компилирует его без ошибок).

У меня есть специальная функция assert, которая выдает сообщение wstring. Частью этого является макрос _ _FUNCTION__, который я "unicodize", используя макрос WIDEN из MSDN

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

Хорошо компилируется в MSVC, но печатает это в GCC:

error: ‘L__FUNCTION__’ was not declared in this scope

Единственное решение, которое я мог бы найти, - преобразовать содержимое __FUNCTION __ в wstring во время выполнения, используя mbstowcs, но я хотел бы найти способ компиляции во время компиляции.

Спасибо за помощь.

1 Ответ

5 голосов
/ 25 марта 2010

В GCC __FUNCTION__ - это нестандартное расширение. Цитировать: GCC Online Docs

В GCC 3.3 и ранее, только в C, __FUNCTION__ и __PRETTY_FUNCTION__ обрабатывались как строковые литералы; Oни может быть использован для инициализации char массивы, и они могут быть объединены с другими строковыми литералами. GCC 3.4 и позже рассматривать их как переменные, как __func__. В C ++ __FUNCTION__ и __PRETTY_FUNCTION__ всегда были переменными.

Таким образом, добавление L в начале __FUNCTION__ просто превратит его в L__FUNCTION__, который, вероятно, не определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...