请教函数宏定义的问题!

yuanhaihua19 2008-09-06 10:20:03

看不懂这个函数宏定义!这个宏的3个参数什么意思?函数里面的##什么意思?怎么一个宏和2个函数关联?谢谢!
...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangdeqie 2008-09-06
  • 打赏
  • 举报
回复
我在VC6下无法通过编译。。。。
yuanhaihua19 2008-09-06
  • 打赏
  • 举报
回复
回复wangdeqie 上面那断代码没有问题编译可以通过!Get##fname1可以那样定义!
wangdeqie 2008-09-06
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

#define DEFINE_ATTRIBUTE_STRING(cname,fname1,fname2)//这不是宏函数定义,倒是像参数列表

//可以这么用
void Getfname1(string DEFINE_ATTRIBUTE_STRING)//Get##fname1这样定义不行吧,#属于非法字符
{

}

int main()
{
return 0;
}

htqx 2008-09-06
  • 打赏
  • 举报
回复
## 表示将字符连接在一起

#define go(x) goto##x

go(123) 实际等于goto123
  • 打赏
  • 举报
回复
#define LINK(x,y) x##y

LINK(a,1);
相当于 a1;
将两个参数连接起来.
yuanhaihua19 2008-09-06
  • 打赏
  • 举报
回复

上面那个图片有的人看不见,换一下,谢谢akirya 但还是不是很明白!
  • 打赏
  • 举报
回复
#include <stdio.h>
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
int main()
{
paster(9);
}


输出
token9 = 9
yuanhaihua19 2008-09-06
  • 打赏
  • 举报
回复

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

#define DEFINE_TEST(cname) \
void set##cname() \
{ \
m_##cname = "DEFINE_TEST"; \
} \
void display##cname() \
{ \
cout << m_##cname << endl; \
}

class CTest
{
public:
CTest()
{
m_CTest = "";
}
DEFINE_TEST(CTest);
private:
string m_CTest;
};

void main()
{
CTest test;
test.setCTest();
test.displayCTest();
return;
}

谢谢akirya和htqx,终于理解这段代码,然后写了上面的代码测试了一下,原来宏只是作文本替换!

64,671

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧