附加__FUNCTION__宏提供的字符串

时间:2015-06-16 11:04:22

标签: c++ macros

我已将宏定义如下:

#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...);
}

2 个答案:

答案 0 :(得分:2)

您可以添加其他宏#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);
};

答案 1 :(得分:-1)

由于__FUNCTION __的类型为static&#34; const char __FUNCTION __ []&#34; ,当你调用m_pTimeMeasurement-&gt; addTimeEntry(_name _)时,addTimeEntry函数参数将是&#34; const char __FUNCTION__ []&#34;。

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

ADD_TIME_ENTRY(strcat(const_cast&lt; char *&gt;(__FUNCTION __),&#34; _start")); ADD_TIME_ENTRY(strcat(const_cast<char *>( __ FUNCTION __)," _ stop&#34;));