加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

C Language Study - how to use '#'

发布时间:2020-12-13 20:05:43 所属栏目:PHP教程 来源:网络整理
导读:宏中的 # 的功能是将其后面的宏参数进行字符串化操作( Stringizing operator ),简单说就是在它援用的宏变量的左右各加上1个双引号。 如定义好 #define STRING ( x ) #x 以后,下面2条语句就等价。 char * pChar = hello ; char * pChar = STRING (hello);

宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它援用的宏变量的左右各加上1个双引号。

如定义好#define STRING(x#x以后,下面2条语句就等价。

       char *pChar = "hello";

       char *pChar = STRING(hello);

还有1个#@是加单引号(Charizing Operator

#define makechar(x)  #@x

       char ch = makechar(b);与char ch = 'b';等价。

 

但有小问题要注意,宏中遇到###时就不会再展开宏中嵌套的宏了。甚么意思了?比如使用char *pChar =STRING(__FILE__);虽然__FILE__本身也是1个宏,但编译器不会展开它,所以pChar将指向"__FILE__"而不是你要想的形如"D:XXX.cpp"的源文件名称。因此要加1个中间转换宏,先将__FILE__解析成"D:XXX.cpp"字符串。

定义以下所示2个宏:

#define _STRING(x#x

#define STRING(x_STRING(x)

再调用下面语句将输出带""的源文件路径

       char* pChar = STRING(__FILE__);

       printf("%s %s "pChar,__FILE__);

可以比较下STRING(__FILE__)__FILE__的不同,前将带双引号,后1个没有双引号。


本文参考:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读