定义了宏想实现拼接出变量规律的变量名称
#define __COVER(oName,tName) oName##pName
int a = 3;
__COVER(Test,a)
Testa 未把 3 传递进来
Test3
宏定义就是简单的字符替换。宏定义里,第二个参数是tName,后面写的是pName,肯定没法替换啊。
是不是应该把pName改成tName。
替换后,必须要有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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
#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;
}