zoukankan      html  css  js  c++  java
  • C 语言宏定义

    C 语言宏定义
    1、例子如下:
    #define PRINT_STR(s) printf("%s",s.c_str())
    string str = "abcd";
    PRINT_STR(str);
    结果如下:abcd
    2、现在我期望打印出,str=abcd, 容易想到的解决办法是:
    #define PRINT_STR(s) printf("s" "=" "%s",s.c_str())
    打印出来的结果是 s=abcd,不是我们所期望的,想一下,为什么?
    在这里,编译器不认为"s"中s就是前面的s,不进行替换。如果进行替换,那么"%s" 也就换成了"%str",这显然错误。
    3、怎么解决上面的问题?使用另一种方式,也就是#(字符串替换,前后加上双引号),如下:
    #define PRINT_STR(s) printf(#s "=" "%s",s.c_str())
    可以认为,对于#s,编译器对s进行替换,并且在s前后加上双引号

    4、考虑下面的情况,
    int token8 = 102;
    PRINT_TOKEN(8);
    期望打印出 token8,容易想到的解决办法是:
    #define PRINT_TOKEN(d) printf("%d",tokend)
    这样是明显错误的,编译器认为tokend是一个整体,不可能只去替换d,怎么解决?
    5、怎么解决这个问题?要进行替换,必须把d隔离出来,而一旦隔离出来,替换是可以了,但是不能与token合在一起构成一个变量了。
    这就要使用##(宏连接符),可以认为## 进行分割,分割后替换,替换之后,再把##去除,如下:
    #define PRINT_TOKEN(d) printf("%d",token##d)

    6、一个# 字符串替换,两个# 宏连接符

  • 相关阅读:
    JAVA--导数到Mongodb
    关于jquery的事件委托-bind,live,delegate,on的区别发展
    cookies localStorage和sessionStorage的区别
    px em 和rem之间的区别
    js中string常用方法
    js中number常用方法
    json格式常用操作
    Node.js到底是做什么的?这是我看到最好的解释了
    数组常用操作方法
    JQuery.Ajax()的data参数类型
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4677521.html
Copyright © 2011-2022 走看看