这个操作有两个特点:(1)代码得到简化 (2)fn 函数名【字符串化】然后组合成一个新的字符串,对数据成员 const char *fn_name 进行初始化 字符串化 宏定义中,通过一个 # 就可以把 一串字符,转换为字符串,这里的一串字符,可以是一个数值,可以是一个函数指针(...
注意能够字符串化操作的必须是宏参数,不是随随便便的某个子串(token)都行的。 2、宏定义中的连接符##: 连接符##用来将两个token连接为一个token,但它不可以位于第一个token之前or最后一个token之后。注意这里连接的对象只要是token就行,而不一定是宏参数,但是##又必须位于宏定义中才有效,因其为编译期概念(...
printf函数的格式控制符就是在前面那个字符串里取的,所以他是一个字符串必然也是格式控制符,我觉得应该是因为宏的关系所以引入的#号来使宏参数字符串化。
注意能够字符串化操作的必须是宏参数,不是随随便便的某个子串(token)都行的。 <2>.宏定义中的连接符##: 连接符##用来将两个token连接为一个token,但它不可以位于第一个token之前or最后一个token之后。注意这里连接的对象只要是token就行,而不一定是宏参数,但是##又必须位于宏定义中才有效,因其为编译期概念...
1、宏定义中字符串化操作符#:#的功能是将其后⾯的宏参数进⾏字符串化操作,意思就是对它所应⽤的宏变量通过替换后在其左右各加上⼀个双引号。例如:#define WARN_IF(EXPR)\ do {\ if (EXPR)\ fprintf(stderr, "Warning: " #EXPR "\n");\ } while(0)上⾯代码中的反斜线\主要⽤来转译...