Ответ 1
"__FUNCTION__
" поддерживается как MSVC, так и GCC и должен предоставить вам необходимую информацию.
Я хочу вывести имя функции каждый раз, когда она вызывается, я могу легко скопировать и вставить имя функции, однако я задавался вопросом, был ли ярлык, который будет выполнять эту работу для меня?
В настоящий момент я делаю:
SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
qDebug("lynxThreeFile::readSlideInfoHeader");
}
но я хочу что-то общее:
SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
qDebug(this.className() + "::" + this.functionName());
}
"__FUNCTION__
" поддерживается как MSVC, так и GCC и должен предоставить вам необходимую информацию.
Из вашего примера видно, что вы используете Qt. В этом случае лучше всего использовать Q_FUNC_INFO
, найденный в <QGlobal>
. Здесь описание:
Расширяется до строки, описывающей функция, в которой находится макрос. эта строка выглядит более конкретно зависит от компилятора. С GNU GCC это как правило, сигнатура функции, в то время как с другими компиляторами это может быть номер строки и столбца.
Если вы используете gcc, вы можете найти __PRETTY_FUNCTION__
больше по своему вкусу.
Если вы проверяете повышение, существует макрос BOOST_CURRENT_FUNCTION, который переносится на разных платформах. В стандарте C99 имеется переменная компилятора __func__
, которая имеет желаемый эффект. Я считаю, что был принят в стандарт С++ 0x. Разумное количество компиляторов уже поддержит это.
__func__
- c99 (что, в свою очередь, означает, что он может не работать с визуальной студией, но эй стандарт: o))
__FUNCTION__
работает практически везде
__PRETTY_FUNCTION__
является специфичным gnu и возвращает полное квалифицированное имя с (namespaces?), classname, returntype, functionname, parameterslist