关于宏定义问题

乙天 2012-12-25 12:02:35
定义宏操作:类似于函数 Add(int a, int b)功能;
开始宏定义:
#define MYADD(A,B) {A+B;}
再定义:
#define MYADDT(S) {ADD(S);}

使用:
int a =1, b=3, c;
c = MYADDT(a, b);
这里想问如何让0宏定义中S能 扩展成 使用时的a, b;

不科学的表示 就是让 S = a, b;
...全文
304 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
乙天 2013-01-07
  • 打赏
  • 举报
回复
引用 18 楼 zhao4zhong1 的回复:
引用 17 楼 yitian542 的回复:引用 16 楼 zhao4zhong1 的回复:引用 12 楼 zhao4zhong1 的回复:宏是一种语法糖。 有时用宏实现不了的复杂预处理需要用自己编写程序使用“代码生成(Code Generation)”技术来完成。 你的意思是自己编写一个能把原始代码扩展成自己需要的代码的处理程序,在真正代码编译之前先调用这个处理程序……
明白了,不过这样确实工程量太大了点
乙天 2013-01-07
  • 打赏
  • 举报
回复
引用 23 楼 yitian542 的回复:
引用 19 楼 shit_moment 的回复:没看懂楼主要干什么。 参数不定的宏,能满足楼主的要求么? 确实是想定义一个参数不定的宏
怎么说不能把“,” 只解释成传入的字符
乙天 2013-01-07
  • 打赏
  • 举报
回复
引用 19 楼 shit_moment 的回复:
没看懂楼主要干什么。 参数不定的宏,能满足楼主的要求么?
确实是想定义一个参数不定的宏
BeanJoy 2013-01-05
  • 打赏
  • 举报
回复
恕我不能理解楼主的意思,估计是想这种效果: #、##、#@在#define中的用法
jimette 2013-01-05
  • 打赏
  • 举报
回复
感觉使用addt调用add!
孤独小剑 2013-01-05
  • 打赏
  • 举报
回复
#define MYADDT(args...) ({ADD(## args);})
这样?
唯恐天下不乱 2013-01-05
  • 打赏
  • 举报
回复
没看懂楼主要干什么。 参数不定的宏,能满足楼主的要求么?
赵4老师 2013-01-05
  • 打赏
  • 举报
回复
引用 17 楼 yitian542 的回复:
引用 16 楼 zhao4zhong1 的回复:引用 12 楼 zhao4zhong1 的回复:宏是一种语法糖。 有时用宏实现不了的复杂预处理需要用自己编写程序使用“代码生成(Code Generation)”技术来完成。 你的意思是自己编写一个能把原始代码扩展成自己需要的代码的处理程序,在真正代码编译之前先调用这个处理程序进行扩展?(图意思描述的对不?) ……
是这个意思。
乙天 2013-01-04
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
这个只能看扩展类型,实在不知道怎么写出如问题所描述的宏;请多指教。
乙天 2013-01-04
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
明白啦
乙天 2013-01-04
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
没整明白怎么设置选项,惭愧
乙天 2013-01-04
  • 打赏
  • 举报
回复
引用 16 楼 zhao4zhong1 的回复:
引用 12 楼 zhao4zhong1 的回复:宏是一种语法糖。
有时用宏实现不了的复杂预处理需要用自己编写程序使用“代码生成(Code Generation)”技术来完成。

你的意思是自己编写一个能把原始代码扩展成自己需要的代码的处理程序,在真正代码编译之前先调用这个处理程序进行扩展?(图意思描述的对不?)
赵4老师 2013-01-04
  • 打赏
  • 举报
回复
引用 12 楼 zhao4zhong1 的回复:
宏是一种语法糖。
有时用宏实现不了的复杂预处理需要用自己编写程序使用“代码生成(Code Generation)”技术来完成。
乙天 2012-12-26
  • 打赏
  • 举报
回复
引用 9 楼 mgo521 的回复:
有点明白lz的意思了, “ c = MYADDT(a, b); MYADDT(S) 宏定义中S能 扩展成 使用时的a, b; " 我觉得不可能自动扩展的,很好奇为什么这样想?
这个是想用VS自己定义的宏,但,它们的宏不能满足需要,就想在VS宏的基础上再扩展定义自己的宏。
赵4老师 2012-12-26
  • 打赏
  • 举报
回复
宏是一种语法糖。
赵4老师 2012-12-26
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
乙天 2012-12-25
  • 打赏
  • 举报
回复
在上面我的定义是不正确的,只是想说明这样的意思。
引用 3 楼 lile1234_show 的回复:
难道LZ让我们给你定义 , (a, b ) 这种模式的宏?
确实是这样。
乙天 2012-12-25
  • 打赏
  • 举报
回复
只是
引用 2 楼 W170532934 的回复:
没懂楼主的意思
只是举个这样的例子,有可不可以定义这样的宏,如果可以怎么定义?
dhdahai 2012-12-25
  • 打赏
  • 举报
回复
lee_鹿游原 2012-12-25
  • 打赏
  • 举报
回复
难道LZ让我们给你定义 , (a, b ) 这种模式的宏?
加载更多回复(5)

64,642

社区成员

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

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