附加 __FUNCTION__ 宏提供的字符串

Append the string provided by __FUNCTION__ macro

我定义了一个宏如下:

#define ADD_TIME_ENTRY(_name_)   m_pTimeMeasurement->addTimeEntry(_name_);

现在,我想通过 ADD_TIME_ENTRY() 将函数名称传递到我放置 ADD_TIME_ENTRY()

的任何函数中

ADD_TIME_ENTRY(__FUNCTION__) 对我来说工作正常,但现在,我想在函数名称的末尾添加“_start”或“_stop”。我的意思是,我需要 "imageFunction()_start" 之类的东西,但我做不到。

我想在一行中完成,即

imageFunction()
{
    ADD_TIME_ENTRY(__FUNCTION__ ....something here...);
}

您可以添加一个额外的宏 #define STRINGIZE(str) #str 并像这样使用它:ADD_TIME_ENTRY(__FUNCTION__ STRINGIZE(start))


似乎 __FUNCTION__ 可能不是一个宏,所以在这种情况下将它与任何东西结合起来并不是特别容易。在 MSVC2013 中,它是一个宏,因此很容易组合。对于其他编译器,我会尝试以下操作:

#define GIVE_ME_NAME(tag) std::string(__FUNCTION__) + STRINGIZE(tag)

不是特别有效,但工作方式。

示例:

#include <iostream>
#include <string>
using namespace std;

#define STRINGIZE(str) #str
#define GIVE_ME_NAME(tag) std::string(__FUNCTION__) + STRINGIZE(tag)

int main()
{
    std::cout << GIVE_ME_NAME(start);
};

由于 __FUNCTION__ 是静态类型 "const char __FUNCTION__[]" ,当您调用 m_pTimeMeasurement->addTimeEntry(_name_) 时,addTimeEntry 函数参数将为 "const char __FUNCTION__[]".

所以你可以连接两个char变量并传递它

ADD_TIME_ENTRY(strcat(const_cast< char *>(__FUNCTION__),"_start")); ADD_TIME_ENTRY(strcat(const_cast<char *>(__FUNCTION__),"_stop") );