关于C和C++预处理中的宏

endeavourken 2014-07-08 11:26:37
这阵子学习C++,在钻研语法的同时,对编译的过程也产生了点兴趣。大家都知道C和C++在预处理阶段有个很重要的部分就是宏替换。最近写了一个几百行的小程序,用来模拟C/C++的宏替换,具体说就是实现下面两种替换
1) #define ABCD JOIN (ABCD和JOIN可以是任意的字符串)
2) #define Geek(A,B,C) A*A-B+C (宏替换名称Geek可以任取,里面参数个数没有限制;A*A-B+C也可以是任意字符串)
当提示用户输入这两种宏替换中的一种后,应用这个宏来对任意文本进行替换操作。
大家觉得为了实现这二种替换,程序具体应该分为哪几个步骤来做呢?
...全文
164 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
endeavourken 2014-07-12
  • 打赏
  • 举报
回复
好吧,大家回得可真够简洁的。 我之前编写的那个程序,主要用的还是C的框架,然后用到的字符串函数都是自己编写的,加起来二百四十行。 后来直接改用C++的string类还有其成员函数,用了80多行就搞定了
endeavourken 2014-07-09
  • 打赏
  • 举报
回复
可以用正则表达式? 我在Linux shell编程中用到这个,不过在C/C++不知道该如何使用呢?
赵4老师 2014-07-09
  • 打赏
  • 举报
回复
学习使用awk和sed
taodm 2014-07-08
  • 打赏
  • 举报
回复
那是因为你没有大量使用正则表达式吧。
引用 3 楼 endeavourken 的回复:
你确定吗?我的去掉空白行还有各种注释,大概有200多行
endeavourken 2014-07-08
  • 打赏
  • 举报
回复
你确定吗?我的去掉空白行还有各种注释,大概有200多行
endeavourken 2014-07-08
  • 打赏
  • 举报
回复
对于第二种宏替换,我的思路是 //preparation stage step 1: 判断属于第二种宏 step 2: 确认宏替换名(就是Geek啦)和其中的参数名 step 3: 获取样本pattern,比如刚才的例子,就是获得#1*#1-#2+#3(这步是核心) //processing stage step 4: 在文本中找到宏替换所在位置,并且获得所有的参数字符串 step 5: 按照样本pattern来进行替换并输出
taodm 2014-07-08
  • 打赏
  • 举报
回复
全套的宏替换,也就是100行的程度,一共就一步吧

65,210

社区成员

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

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