Подтвердить что ты не робот

Как получить имя функции во время функции для строк отладки?

Я хочу вывести имя функции каждый раз, когда она вызывается, я могу легко скопировать и вставить имя функции, однако я задавался вопросом, был ли ярлык, который будет выполнять эту работу для меня?

В настоящий момент я делаю:

SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
    qDebug("lynxThreeFile::readSlideInfoHeader");
} 

но я хочу что-то общее:

SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
    qDebug(this.className() + "::" + this.functionName());
}
4b9b3361

Ответ 1

"__FUNCTION__" поддерживается как MSVC, так и GCC и должен предоставить вам необходимую информацию.

Ответ 2

Из вашего примера видно, что вы используете Qt. В этом случае лучше всего использовать Q_FUNC_INFO, найденный в <QGlobal>. Здесь описание:

Расширяется до строки, описывающей функция, в которой находится макрос. эта строка выглядит более конкретно зависит от компилятора. С GNU GCC это как правило, сигнатура функции, в то время как с другими компиляторами это может быть номер строки и столбца.

Ответ 3

Если вы используете gcc, вы можете найти __PRETTY_FUNCTION__ больше по своему вкусу.

Ответ 4

Если вы проверяете повышение, существует макрос BOOST_CURRENT_FUNCTION, который переносится на разных платформах. В стандарте C99 имеется переменная компилятора __func__, которая имеет желаемый эффект. Я считаю, что был принят в стандарт С++ 0x. Разумное количество компиляторов уже поддержит это.

Ответ 5

__func__ - c99 (что, в свою очередь, означает, что он может не работать с визуальной студией, но эй стандарт: o))

__FUNCTION__ работает практически везде

__PRETTY_FUNCTION__ является специфичным gnu и возвращает полное квалифицированное имя с (namespaces?), classname, returntype, functionname, parameterslist