免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1431 | 回复: 6
打印 上一主题 下一主题

define的问题. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-19 17:23 |只看该作者 |倒序浏览
define为什么是每次一遍的替换?

#include <stdio.h>
#define aaaa bbbb
#define bbbb aaaa

int main(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("aaaa\n");
}


结果是aaaa

为什么要这样?

论坛徽章:
0
2 [报告]
发表于 2009-04-19 17:30 |只看该作者
不会替换字符串里面的内容的

论坛徽章:
0
3 [报告]
发表于 2009-04-19 17:44 |只看该作者
#include <stdio.h>
void f1(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("aaaa");
}
void f2(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("bbbb");
}
int main(){
#define f1 f2
#define f2 f1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f1();
}


这次是这样的.输出aaaa
define会对代码起作用.但不是同时?

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
4 [报告]
发表于 2009-04-19 17:46 |只看该作者
原帖由 epegasus 于 2009-4-19 17:44 发表
#include
void f1(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("aaaa");
}
void f2(){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("bbbb");
}
int main(){
#define f1  ...


您是玩编译器呢?还是想让编译器玩您?

论坛徽章:
0
5 [报告]
发表于 2009-04-19 17:52 |只看该作者
谁玩谁不是关键,关键是看define怎么起作用的

论坛徽章:
1
午马
日期:2013-08-23 23:39:47
6 [报告]
发表于 2009-04-19 20:24 |只看该作者
圣经里说 ,

#define 标示符 记号序列
#define 标示符(表示附表) 记号序列

对于这两种类型的宏,都要重复扫描替换记号序列以查找更多的已定义标示符。但是,当某个标示符在某个扩展中被替换后,再次扫描并再次遇到此标示符时不再对其执行替换,而是保持不变。

不知道C99标准里怎么说的

论坛徽章:
0
7 [报告]
发表于 2009-04-20 09:06 |只看该作者
哪来那么复杂,宏就是文本替换,忽略字符串
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP