我尝试没有任何结果。
我的代码如下所示:

#include "stdafx.h"
#include <iostream>

#define R() ( rand() )
#define H(a,b) ( a ## b )
#define S(a) ( # a )
#define CAT() H(S(distinct_name_), R())


int main(int argc, _TCHAR* argv[])
{
    std::cout << CAT() << std::endl;
    std::cout << CAT() << std::endl;
    std::cout << CAT() << std::endl;
    return 0;
}

我想得到这样的结果:
distinct_name_12233
distinct_name_147
distinct_name_435

as a result of concatenating
distinct_name_ (##) rand()

现在我遇到一个错误:
term不求值一个带有1个参数的函数。
这可以实现吗?

编辑:
几个小时后,我终于成功了。预处理器仍然做一些我无法完全理解的奇怪事情。它去了:
#include "stdafx.h"
#include <iostream>

class profiler
{
public:
    void show()
    {
        std::cout << "distinct_instance" << std::endl;
    }
};

#define XX __LINE__
#define H(a,b) ( a ## b )
#define CAT(r) H(distinct_name_, r)
#define GET_DISTINCT() CAT(XX)
#define PROFILE() \
    profiler GET_DISTINCT() ;\
    GET_DISTINCT().show() ; \


int main(int argc, _TCHAR* argv[])
{

    PROFILE()
    PROFILE()
    return 0;
}

输出为:
distinct_instance
distinct_instance

感谢@Kinopiko提供__LINE__提示。 :)

最佳答案

我看到很多人已经正确回答了这个问题,但是作为替代建议,如果您的预处理器实现__TIME____LINE__,则可以得到与您想要的结果完全相同的结果,并带有连接的行号或时间,而不是随机的数。

关于c++ - 变量+值宏扩展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1578703/

10-10 21:34