Как получить имя функции в функции для строк отладки? - PullRequest
19 голосов
/ 06 октября 2008

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

На данный момент я делаю:

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

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

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

Ответы [ 5 ]

27 голосов
/ 06 октября 2008

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

13 голосов
/ 06 октября 2008

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

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

8 голосов
/ 06 октября 2008

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

5 голосов
/ 20 октября 2008

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

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

__PRETTY_FUNCTION__ является специфичным для GNU и возвращает полное квалифицированное имя с (пространства имен?), Имя класса, тип повторения, имя функции, список параметров

5 голосов
/ 06 октября 2008

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

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