1. 关于宏(Macro)

属于编译器预处理的范畴,属于编译器概念(而非运行期概念)。

2. 关于#

#的功能:是 将其后面的宏参数进行 字符串化操作(Stringfication),即:在对它所引用的 宏变量 通过替换后在其左右各加上一个双引号。

如下:

C语言宏定义##连接符和#符的使用-风君雪科技博客

C语言宏定义##连接符和#符的使用-风君雪科技博客

这样每次divider(除数)为0的时候便会在 标准错误流 上输出一个提示信息。

3. 关于##

 ##被称为连接符(concatenator),用来将两个Token连接为一个Token。注意,这里连接的对象是Token即可,而不一定是宏的变量。

 C语言宏定义##连接符和#符的使用-风君雪科技博客

C语言宏定义##连接符和#符的使用-风君雪科技博客

int NAME(a);  int NAME(b); 在经过预处理后这一声明变为:int int_namea; int int_nameb;

可以看出,预编译时,宏参数n被替换,并和name连接成一个整体,然后整体替换NAME宏。