gpt4 book ai didi

c++ - 变量 + 值宏扩展

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:03 25 4
gpt4 key购买 nike

我试过了,没有结果。我的代码如下所示:

#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__ 提示。 :)

最佳答案

不,你不能那样做。宏是编译时的东西,函数只在运行时调用,所以你无法从 rand() 中获取随机数到你的宏展开中。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com