Программирование ARM Отличия __PRETTY_FUNCTION__, __FUNCTION__, __func__. Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Отличия __PRETTY_FUNCTION__, __FUNCTION__, __func__. Печать
Добавил(а) microsin   

Для отладочного вывода могут использоваться предопределенные имена __PRETTY_FUNCTION__, __FUNCTION__, __func__.

__func__ это неявно объявленный идентификатор, который расширяется в переменную массива символов строки ASCIIZ, где содержится имя функции, из тела которой использовался __func__. Это было добавлено в библиотеку C стандарта C99. Из описания C99 §6.4.2.2/1:

Идентификатор __func__ неявно объявляется транслятором, как если бы сразу после открывающей скобки каждого определения функции была вставлена декларация:

static const char __func__[] = "имя_функции";

..., где имя_функции это имя лексически-охватывающей функции.

Обратите внимание, что __func__ не макрос, и у него нет специального смысла для препроцессинга.

__FUNCTION__ это расширение (не определенное явно в стандарте), поддерживаемое некоторыми компиляторами C (включая gcc и Visual C++). 

В общем случае следует использовать __func__, где это поддерживается, а применять __FUNCTION__ следует только если используется компилятор, который не поддерживает __func__ (например Visual C++, который не поддерживает C99, и пока что не поддерживает все фичи C++0x, не обеспечивает обработку __func__).

__PRETTY_FUNCTION__ это расширение gcc, которое почти то же самое, что и __FUNCTION__, кроме функций C++, содержащих имя "pretty", включая сигнатуру функции. В Visual C++ есть подобное расширение __FUNCSIG__ (но не совсем идентичное).

Для нестандартных макросов консультируйтесь с документацией на ваш компилятор. Описание расширений Visual C++ включено в документацию MSDN компилятора C++, см. раздел "Predefined Macros". Документация по расширениям gcc см. в разделе "Function Names as Strings."

[Ссылки]

1. What's the difference between __PRETTY_FUNCTION__, __FUNCTION__, __func__? site:stackoverflow.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page