C语言中##和#的用法
来源:互联网 发布:matlab m文件读取数据 编辑:程序博客网 时间:2024/05/16 03:16
碰到一道笔试题:
读程序,写出结果
var2 = var1
一直知道##是连接符号的意思,不太清楚#的用法,所以就网上搜了一下。
解释如下:
# 字符串化运算符
出现在宏定义中的#是把跟在其后的参数转换成一个字符串.
## 符号连接运算符
## 运算符用于把参数连接到一起.
这才恍然大悟,调用宏以后就是把第二个参数转换成了字符串。所以就会出现上述那个结果。
真是不错,算是补上了以前没认真学习的基础知识。又从搜到的文章往下看了一下,有高手提出了这个问题:
STRCPY(STRCPY(var1,var2),var2);
是否会展开为: strcpy(strcpy(var1_p,"var2")_p,"var2“)?
作者解答如下:
答案是否定的:
* 展开结果将是: strcpy(STRCPY(var1,var2)_p,"var2")
* ## 阻止了参数的宏展开!
* 如果宏定义里没有用到 #和 ##, 宏将会完全展开
也就是程序编译不通过,因为展开后找不到大写的STRCPY函数。
在有##和#的情况下,嵌套的宏不会完全展开。
读程序,写出结果
#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 ", var1_p);
printf("var2 = %s ", var2_p);
return 0;
}
答:var1 = var2int 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 ", var1_p);
printf("var2 = %s ", var2_p);
return 0;
}
var2 = var1
一直知道##是连接符号的意思,不太清楚#的用法,所以就网上搜了一下。
解释如下:
# 字符串化运算符
出现在宏定义中的#是把跟在其后的参数转换成一个字符串.
## 符号连接运算符
## 运算符用于把参数连接到一起.
这才恍然大悟,调用宏以后就是把第二个参数转换成了字符串。所以就会出现上述那个结果。
真是不错,算是补上了以前没认真学习的基础知识。又从搜到的文章往下看了一下,有高手提出了这个问题:
STRCPY(STRCPY(var1,var2),var2);
是否会展开为: strcpy(strcpy(var1_p,"var2")_p,"var2“)?
作者解答如下:
答案是否定的:
* 展开结果将是: strcpy(STRCPY(var1,var2)_p,"var2")
* ## 阻止了参数的宏展开!
* 如果宏定义里没有用到 #和 ##, 宏将会完全展开
也就是程序编译不通过,因为展开后找不到大写的STRCPY函数。
在有##和#的情况下,嵌套的宏不会完全展开。
- C语言中##和#的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- C语言:宏中"#"和"##"的用法
- C语言中#和##的用法
- C语言中##和#的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- C语言中#和##的用法
- C语言宏中"#"和"##"的用法
- C语言中%*的含义和用法
- [c语言]宏中 #和##的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- C语言宏中"#"和"##"的用法
- 关于C语言中 || 和 &&的用法
- Android不让弹出键盘挡住View
- TSEvent消息系统.c++版小样
- 不靠谱
- 题目1384:二维数组中的查找(剑指offer-面试题3)
- android 线程池
- C语言中##和#的用法
- ExecutorService常用方法和newFixedThreadPool创建固定大小的线程池
- ubuntu下使用qemu-system-arm模拟arm环境
- android -- NDK 编译环境搭建
- 怎样部署或打包刚刚做好的java web项目产品
- VMware下Ubuntu使用hgfs共享主机文件
- maven打包jar时,自动添加mainClass和复制依赖的其他jar
- POJ1922-Ride to School
- Java命令参数说明大全