免费注册 查看新帖 |

Chinaunix

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

请教一个语法  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-07 09:39 |只看该作者 |倒序浏览
#x
##x有什么区别?

论坛徽章:
0
2 [报告]
发表于 2007-05-07 10:15 |只看该作者
The unary operator # causes "stringization" of a formal parameter in a macro definition. Here is an example of its use:

  1. #define   message_for (a, b) \
  2.           printf (#a " and " #b ": We love you!\n")
  3. int main () {
  4.     message_for (Carole, Debra);
  5.     return 0;
  6. }
复制代码

When the macro is invoked, each parameter in the macro definition is replaced by its corresponding argument, with the # causing the argument to be surrounded by double quotes.Thus,after the preprocessor pass, we obtain

  1. int main () {
  2.     printf ("Carole" " and " "Debra" ": We love you!\n");
  3.     return 0;
  4. }
复制代码


The binary operator ## is used to merge tokens. Here is an example of how the operator is used:

  1. #define    X(i)     x ## i
  2. X(1) = X(2) = X(3);
复制代码

After the preprocessor pass, we are left with the line
x1 = x2 = x3;

论坛徽章:
0
3 [报告]
发表于 2007-05-07 10:19 |只看该作者
谢谢。这些细节。我不是很清楚

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2007-05-07 11:05 |只看该作者
原帖由 地球杀手 于 2007-5-7 09:39 发表
#x
##x有什么区别?

又一打哑谜的主……

论坛徽章:
0
5 [报告]
发表于 2007-05-07 11:22 |只看该作者
原帖由 MMMIX 于 2007-5-7 11:05 发表

又一打哑谜的主……

没有打哑谜啊。我看了一段代码,代码里有好多#,##的。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2007-05-07 11:29 |只看该作者
原帖由 地球杀手 于 2007-5-7 11:22 发表

没有打哑谜啊。我看了一段代码,代码里有好多#,##的。

提问的时候请把你的问题描述清楚,并给出必要的上下文/语境。你觉得你做到了么?

论坛徽章:
0
7 [报告]
发表于 2007-05-07 12:13 |只看该作者
不作评论,仅供参考


■ #define MONCK(MSG) \
        printf("The Term is " #MSG " is a string\n" )

   MONCK(A to B);

扩展后: printf("The Term is A to B is a string\n" );



■ ## 连接符
#define PASTE(a) a##house

#define PASTE("mik" )

preprocessor 扩展后: mikhouse

论坛徽章:
0
8 [报告]
发表于 2007-05-07 16:06 |只看该作者
这问题似乎只有一个解.
怎么说是哑谜..

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2007-05-07 20:18 |只看该作者
原帖由 sanor 于 2007-5-7 16:06 发表
这问题似乎只有一个解.
怎么说是哑谜..

似乎?

#x 只能在宏定义中出现?不能作为预编译指令出现?其实这些都不重要,关键还是我上面说的,
提问的时候请把你的问题描述清楚,并给出必要的上下文/语境。


其实许多时候,当你把你的问题想清楚了,即使还不清楚具体的答案是什么,也差不多知道该去查什么资料了。就以楼主的问题为例,我想其问题若描述为 "在 C/C++ 的宏定义中 #x 和 ##x 的区别“ 会比其在顶楼的描述清楚许多,而且这个完全可以作为帖子的标题(现在这个标题实在是太模糊了)。

另外,看到 "在 C/C++ 的宏定义中 #x 和 ##x 的区别" 这个问题,即使不清楚其具体答案,但至少清楚要去查些什么资料(当然前提是其对 C/C++ 有基本的认识),自己解决这个问题当不是什么难事。

楼主的问题,一言以蔽之,就是懒。懒得把自己的问题想清楚,懒得在提问时把自己的问题写清楚,懒得自己去查资料解决问题。

[ 本帖最后由 MMMIX 于 2007-5-7 20:31 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-05-08 20:28 |只看该作者
请修改标题,改后短信通知任一版主再予开放
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP