当前位置:首页 » 《随便一记》 » 正文

C语言宏中“#”和”##“的用法

19 人参与  2024年09月29日 11:21  分类 : 《随便一记》  评论

点击全文阅读


1. (#)字符串化操作符
作用:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。
如:

#define example( instr ) printf( "the input string is:\t%s\n", #instr )

编译时:

example( abc ); // 在编译时将会展开成:printf("the input string is:\t%s\n","abc")


2. (##)符号连接操作符
作用:将宏定义的多个形参转换成一个实际参数名。
如:

#define exampleNum( n ) num##n

使用时:

nt num9 = 9;int num = exampleNum( 9 ); // 将会扩展成 int num = num9

注意:
a. 当用##连接形参时,##前后的空格可有可无。
如:

#define exampleNum( n ) num ## n// 相当于 #define exampleNum( n ) num##n

b. 连接后的实际参数名,必须为实际存在的参数名或是编译器已知的宏定义。
c. 如果##后的参数本身也是一个宏的话,##会阻止这个宏的展开。
 

#include <stdio.h>#include <string.h>#define STRCPY(a, b) strcpy(a ## _p, #b)int main(){char var1_p[20];char var2_p[30];strcpy(var1_p, "aaaa");strcpy(var2_p, "bbbb");STRCPY(var1, var2);STRCPY(var2, var1);printf("var1 = %s\n", var1_p);printf("var2 = %s\n", var2_p);//STRCPY(STRCPY(var1,var2),var2);//这里是否会展开为: strcpy(strcpy(var1_p,"var2")_p,"var2“)?答案是否定的://展开结果将是: strcpy(STRCPY(var1,var2)_p,"var2")//## 阻止了参数的宏展开!如果宏定义里没有用到 # 和 ##, 宏将会完全展开// 把注释打开的话,会报错:implicit declaration of function 'STRCPY'return 0;}

结果:

var1 = var2var2 = var1


点击全文阅读


本文链接:http://zhangshiyu.com/post/166086.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1