C ++使用__COUNTER__自动生成不同的命名函数

时间:2014-04-15 12:52:14

标签: c++ macros c-preprocessor googletest

我想生成用于编写单元测试用例的不同命名函数。我想这样做基本上为每个单元测试用例提供唯一的名称。

我正在使用 google test framework 来编写单元测试用例。 我必须使用TEST_Macro来编写单元测试用例。我想自动为每个单元测试提供递增的数字。

这是我的(非工作)代码:

#include <iostream>
using namespace std;

#define join(x, y) x## y

void join(test, __COUNTER__)()
{
    cout << "\n 1";
}

void join(test, __COUNTER__)()
{
    cout << "\n 2";
}

int main()
{
    cout << "Hello world!" << endl;

     test0() ;
     test1() ;

    return 0;
}

使用__COUNTER__生成唯一函数名称的正确方法是什么?

1 个答案:

答案 0 :(得分:6)

所以这是旧的“粘贴在评估宏参数之前发生”,所以你得到test__COUNTER__而不是test0。

您需要执行嵌套宏:

#define expandedjoin(x,y) x##y
#define join(x, y) expandedjoin(x, y)

(代码的其余部分会产生很多错误,因为您将void函数传递给cout,这不是很好)

完整的工作代码:

#include <iostream>
using namespace std;
#define expandedjoin(x,y) x##y
#define join(x, y) expandedjoin(x, y)

void join(test, __COUNTER__)()
{
    cout << "\n 1";
}

void join(test, __COUNTER__)()
{
    cout << "\n 2";
}

int main()
{
    cout << "Hello world!" << endl;

    test0();
    test1();

    return 0;
}