宏定义中#,#@,##的用法

宏定义中#,#@,##的用法

ID:33650468

大小:48.50 KB

页数:9页

时间:2019-02-28

宏定义中#,#@,##的用法_第1页
宏定义中#,#@,##的用法_第2页
宏定义中#,#@,##的用法_第3页
宏定义中#,#@,##的用法_第4页
宏定义中#,#@,##的用法_第5页
资源描述:

《宏定义中#,#@,##的用法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、宏定义中"#"的用法分类: VC/MFC2011-01-0911:32 49人阅读 评论(0) 收藏 举报惭愧,今天测试了才真正明白,在宏定义中使用"#", 还是因为群里有TX提出,才测试的 看代码: viewplain1.#define macro(a) #a  2.#define macro2(a,b) a##b  3.#define macro3(a,b,c) a##b##c   #a, 表示a不再是一个变量,而变成了字符串"a"##表示连接,a##b, 表示输入的参数名为ab, a##b

2、##c同理,代表变量名为:abc 测试例子:viewplain1.int x = 3;     2.int y = 4;     3.int xy = 10;   4.int xyz=20;  5.CString str;  6.  7.  8.OutputDebugString(macro(x));  9.  10.str.Format("%d",macro2(x,y));  11.OutputDebugString(str);  12.  13.str.Format("%d",macro3(

3、x,y,z));  1.OutputDebugString(str);   输出结果为:x1020 第一个为x, marco(x), x变成了"x"字符串第二个为10,macro(x,y),就是变量xy第三个为20,macro(x,y,z),就是变量xyzC语言宏定义中"#","#@"和"##"的用法一、一般用法#把宏参数变为一个字符串,#@把宏参数变为一个字符,##把两个宏参数贴合在一起。 #include#include#defineSTR(s)    

4、#s          //#与参数之间可以有空格#defineTOCHAR(c)    #@c     #defineCONS(a,b) int(a##e##b)   //##与参数之间可以有空格intmain(void){   printf(STR(pele));        //输出字符串"pele"   printf("%c",TOCHAR(z)); //输出字符z   printf("%d",CONS(2,3)); //2e3输出:2000   return0;} 二、当宏参

5、数是另一个宏的时候需要注意的是凡宏定义里有用'#'或'##'的地方宏参数是不会再展开的。#defineA        (2)#defineSTR(s)    #s#defineCONS(a,b) int(a##e##b) printf("intmax:%s", STR(INT_MAX));这行会被展开为:printf("intmax:%s","INT_MAX"); printf("%s",CONS(A,A));  这一行被展开为:printf("%s",int(AeA)); I

6、NT_MAX和A都不会再被展开,然而解决这个问题的方法很简单,多加一层中间转换宏。加这层宏的用意是把所有宏的参数在这层里全部展开,那么在转换宏里的那一个宏(_STR)就能得到正确的宏参数。 #defineA         (2)#define_STR(s)    #s#defineSTR(s)     _STR(s)        //转换宏#define_CONS(a,b) int(a##e##b)#defineCONS(a,b)  _CONS(a,b)     //转换宏 printf("

7、intmax:%s",STR(INT_MAX));输出为:intmax:0x7fffffffSTR(INT_MAX) --> _STR(0x7fffffff) -->"0x7fffffff" printf("%d",CONS(A,A));输出为:200CONS(A,A) --> _CONS((2),(2)) -->int((2)e(2)) 以下为Minix3操作系统相关的源代码:#ifdef _ANSI#define  __str(x)    #x#define  __xstr(x)  

8、 __str(x)    //转换宏_PROTOTYPE(void__bad_assertion,(constchar*_mess));#define  assert(expr)((expr)?(void)0:                  __bad_assertion("Assertion""#expr                   ""failed,file"__xstr(__FILE__)                   ",line"__xstr(__LINE_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。