C语言宏定义中#和##运算符
来源:互联网 发布:ubuntu镜像文件 编辑:程序博客网 时间:2024/06/02 02:44
宏定义可以包含两个专用的运算符:#和##
1, #运算符
#运算符将宏的一个参数转换为字符串字面量,所执行的操作可以理解为“字符串化”。它仅允许出现在带参数的宏的替换列表中。举个例子
#define PRINT_INT(n) printf(#n " = %d\n", n)
n之前的#运算符通知预处理器根据PRINT_INT的参数创建一个字符串字面量,因此
PRINT_INT(i/j);
会变为
printf("i/j" " = %d\n", i/j);
根据C语言的规则:当两条或更多条字符串字面量相邻时(仅用空白字符分割),编译器会把它们合并成一条字符串。
以上的语句等价于:
printf("i/j = %d\n", i/j);
2. ##运算符
##运算符可以将两个记号(如标识符)“粘合”在一起,成为一个记号。如果其中一个参数是宏参数,“粘合”会在形式参数被相应的实际参数替换后发生。考虑下面的宏:
#define MK_ID(n) i##n
当MK_ID被调用时
int MK_ID(1);
预处理后,这一声明变为
int i1;
3. 在u-boot中的应用
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
则下面的定义
U_BOOT_CMD(HelloWorld, 3, 1, HelloWorld_Cmd, "Print Hello World", "Just a Test");
预编译后变为
cmd_tbl_t __u_boot_cmd_HelloWorld Struct_Section = {"HelloWorld", 3, 1, HelloWorld_Cmd, "Print Hello World", "Just a Test"};
0 0
- C语言宏定义中#和##运算符
- C语言宏定义中#与##运算符
- C语言中宏定义中的#和##
- C语言中运算符和表达式
- c语言宏定义中##连接符和#的使用
- c 语言中宏定义和定义全局变量的区别
- 【c】c语言中逗号运算符和逗号表达式
- C语言~和>>运算符
- C语言中宏定义和函数的取舍
- C语言中宏定义和函数的取舍
- C语言中宏定义和函数的取舍
- C语言中宏定义和函数的取舍
- C语言中宏定义和函数的取舍
- C语言中宏定义和函数的取舍
- C语言宏定义中#和##的作用
- c语言中宏定义和函数区别
- C语言中宏定义"#"和"##"符号的用法
- C语言宏定义中 "#","#@"和 "##"的用法
- 初级前端工程师基本技术掌握
- Spring配置文件的详解之AOP
- javaBean&&JSP
- 《c++ primer》 第11章 关联容器 学习笔记
- Windows Server2012配置VPN服务器
- C语言宏定义中#和##运算符
- 逻辑运算命令
- JS睡眠函数
- sql server 无法打开用户默认数据库。登录失败---解决办法
- dribbble ? [展示和发现设计, 全球设计师资源网站] [Dribbble is show and tell for designers.]
- BFS和DFS详解以及java实现
- vue生命周期
- 总结《二》MFC中WinMain和CALLBACK
- 小型的员工管理系统-SSM-03