GCC, Unicode и __ ФУНКЦИОНИРУЮТ __

Я пытаюсь сделать свою компиляцию проекта под GCC (Visual Studio компилирует его безупречно).

У меня есть пользовательское, утверждают функцию, которая бросает сообщение wstring. Часть его _ _FUNCTION __ макрос, который я "unicodize" использование РАСШИРИТЬ макроса из MSDN

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

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

error: ‘L__FUNCTION__’ was not declared in this scope

Единственное решение, с которым я мог идти, состоит в том, чтобы преобразовать содержание __ ФУНКЦИЯ __ к wstring на времени выполнения с помощью mbstowcs, но я хотел бы найти время компиляции способом сделать это.

Спасибо за справку.

6
задан Matěj Zábský 25 March 2010 в 20:07
поделиться

1 ответ

В GCC __ FUNCTION __ является нестандартным расширением. Цитата: GCC Online Docs

В GCC 3.3 и ранее, только в C, __ FUNCTION __ и __ PRETTY_FUNCTION __ обрабатывались как строковые литералы; их можно использовать для инициализации массивов char , и они могут быть объединены с другими строковыми литералами. GCC 3.4 и более поздние версии обрабатывают их как переменные, как __ func __ . В C ++ __ FUNCTION __ и __ PRETTY_FUNCTION __ всегда были переменными.

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

5
ответ дан 17 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: