C++使用宏##拼接的时候能把传入的参数值的值加上嘛?

问题遇到的现象和发生背景

定义了宏想实现拼接出变量规律的变量名称

问题相关代码,请勿粘贴截图

#define __COVER(oName,tName) oName##pName

int a = 3;
__COVER(Test,a)

运行结果及报错内容

Testa 未把 3 传递进来

我的解答思路和尝试过的方法
我想要达到的结果

Test3

宏定义就是简单的字符替换。宏定义里,第二个参数是tName,后面写的是pName,肯定没法替换啊。
是不是应该把pName改成tName。

img

替换后,必须要有Test3这个变量,否则会报错。参考代码如下:

#include <stdio.h>

#define __COVER(oName,tName) oName##tName

int main(){
    char* Test3="abc"; //需要有Test3这个变量,不管这个变量是什么类型
    //int Test3 = 2;
    int a=3;
    __COVER(Test,3);
    
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

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

#define PRINTER(name) printer(#name, (name))

void printer(char *name, int value) {
    cout<<"name:"<<name<<"  "<<"value:"<<value<<endl;
}

int main () {
    int foo = 0;
    int bar = 1;

    PRINTER(foo);
    PRINTER(bar);

    return 0;
}
//name: foo    value: 0
//name: bar    value: 1


如果用##,对于数值类型是可取的,比如__COVER(33.2,8),结果是33.28,但对于有字符的变量,只能用来定义变量,不能转化成字符,需要用#转化成字符串

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

#define CONNECT(x, y) x##y

#define to_str(s) (#s)
#define CONNECT_STR(x, y) (x)+(y)
int main()
{

    int CONNECT(Test,3);
    CONNECT(Test,3) = 3;
    cout<<CONNECT(Test,3)<<endl;
    cout<<CONNECT(37.3,3)<<endl;

    string s1 = to_str(Test);
    string s2 = to_str(3);
    cout<<CONNECT_STR(s1,s2);
   return 0;
}