在头文件中:
#define PRINTTCNAME(tcName)\
qDebug() << Q_FUNC_INFO; // error
#define RUNTC( tc)\
PRINTTCNAME(tc);\
res = tc();\
if(res == false){ \
TC_clean(); \
}
在main.cpp中:
int TC1_Send();
int TC2_Receive();
int main(int argc, char *argv[]){
RUNTC(TC1_Send);
RUNTC(TC2_Receive);
}
问题:如果我使用上面的代码,它将打印int main(int, char**)
的函数名称,这不是我想要的。
我想打印测试用例的名称,例如TC1_Send
,
TC2_Receive
..
我该如何处理?
答案 0 :(得分:2)
我认为你的主要困惑是你认为这应该是你正在做的功能。
不是。当宏的内容被放置在发生“invokation”的地方时,宏正在经历预处理器步骤。
在预处理器执行之后的那个上下文中,代码周围的这个函数将是主要的,所以这是一种预期的行为。
在这种特殊情况下,只需使用以下内容:
#define PRINTTCNAME(tcName)\
qDebug() << #tcName"()"; // no error
输出将是:
TC1_Send()
TC2_Receive()
答案 1 :(得分:1)
使用__FUNCTION__
代替`Q_FUNC_INFO,它对我有用。
正确使用:
#define NAME __FUNCTION__
void test()
{
qDebug() << NAME;
}
int main()
{
qDebug() << NAME;
test();
return 0;
}
输出将是:
主
测试
您的代码应为:
在头文件中:
#include <QDebug>
#define PRINTTCNAME(tcName) qDebug() << Q_FUNC_INFO;
void RUNTC(int tc)
{
PRINTTCNAME(tc);
res = tc();
if(res == false)
TC_clean();
}
int TC1_Send;
int TC2_Receive;
int main(int argc, char *argv[]){
RUNTC(TC1_Send);
RUNTC(TC2_Receive);
}
答案 2 :(得分:0)
我用: -
__func__
将此作为大多数功能的顶部: -
Log(QString("<< %1::%2 >>").arg(metaObject()->className()).arg(__func__));
Log函数调用qDebug,但可以同样输出到其他位置,例如文件或系统日志。
metaObject() - &gt; className()返回类的名称,因此如果您正在使用类函数,则可以使用它。