C语言中宏定义的基本概念是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1137个文字,预计阅读时间需要5分钟。
目录:以下为目录概览,详细内容请参考正文。
目录
- #和##是宏定义中常用的两个预处理运算符
- 1. 记号串化(#)
- 2. 记号黏结(##)
- 3.分析下列程序运行结果
#和##是宏定义中常用的两个预处理运算符
其中#用于记号串化,##用于记号黏结,下面分别介绍它们。
1. 记号串化(#)
记号串化可以将函数式宏定义中的实参转换为字符串。在函数式宏定义中,如果替换列表中有“#”,则其后的预处理记号必须是当前宏的形参。在预处理期间,“#”连同它后面的形参一起被实参取代。例如
#include <stdio.h> #define PSQR(x) printf("The square of " #x " is %d.\n",((x)*(x))) int main(void) { int y = 5; PSQR(y); PSQR(2 + 4); PSQR( 3 * 2 ); return 0; }
程序运行结果如下:
第1次调用宏时,用"y"替换#x。第2次调用宏时,用"2 + 4"替换#x。第3次调用宏时,用"3 * 2"替换#x。
ANSI C字符串的串联特性将这些字符串与printf()语句的其他字符串组合,生成最终的字符串。
本文共计1137个文字,预计阅读时间需要5分钟。
目录:以下为目录概览,详细内容请参考正文。
目录
- #和##是宏定义中常用的两个预处理运算符
- 1. 记号串化(#)
- 2. 记号黏结(##)
- 3.分析下列程序运行结果
#和##是宏定义中常用的两个预处理运算符
其中#用于记号串化,##用于记号黏结,下面分别介绍它们。
1. 记号串化(#)
记号串化可以将函数式宏定义中的实参转换为字符串。在函数式宏定义中,如果替换列表中有“#”,则其后的预处理记号必须是当前宏的形参。在预处理期间,“#”连同它后面的形参一起被实参取代。例如
#include <stdio.h> #define PSQR(x) printf("The square of " #x " is %d.\n",((x)*(x))) int main(void) { int y = 5; PSQR(y); PSQR(2 + 4); PSQR( 3 * 2 ); return 0; }
程序运行结果如下:
第1次调用宏时,用"y"替换#x。第2次调用宏时,用"2 + 4"替换#x。第3次调用宏时,用"3 * 2"替换#x。
ANSI C字符串的串联特性将这些字符串与printf()语句的其他字符串组合,生成最终的字符串。

