• 如何使用一个宏的值作为参数传递给另一个宏?


    // 宏中的#号是字符串化的意思,就是说把宏参数看成一个字符串。
    // 但是考虑另一种需求:我们要字符串化的参数很长,我们想用另外一个宏代替这个参数。
    //                     这样的话,你字符串化会有问题,
    //                     字符串化的是另一个宏的名字,而不是宏的值。
    // 这就出现了本篇要讨论的问题:如何使用一个宏的值作为参数传递给另一个宏?
    // 方法就是:宏传参给宏,具体的解释看代码注释。
    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
    #define WARN_IF(EXPR) 
    do 
    { 
        if (EXPR) 
        fprintf(stderr, "Warning: " #EXPR "
    "); 
    } while(0)
    
        int divider = 0;
        WARN_IF(divider == 0);
    
    #define CHR xe2x97x8f
    #define PASSWD(x) #x#x#x#x#x#x
    #define MASK(str) PASSWD(str)
    // 你本以为定义2个宏就能完成的功能,PASSWD(CHR),但是并不能完成。
    // 那你就再定义一个解释参数的宏,这样就ok了。
    // 传给MASK的参数是CHR,但是PASSWD调用的却是CHR的值。
    // 因为宏CHR被展开了。
    // 这就叫宏传参给宏。
        printf("passwd:%s
    ", MASK(CHR));
    
        return 0;
    }
    
  • 相关阅读:
    Windows Server 2012 R2 或 2016 无法安装 .Net 3.5.1
    织梦DeDeCms会员登录或退出跳转到首页的修改方法
    use ngCordova in ionic
    Angular2 Todo App
    use traceur in ES6
    Angular2 Use styles in Component
    Angular2 use ng-xx (ng-if)
    Angular2 Router
    Angular2 Http
    1 TypeScript SetUp for Webstorm
  • 原文地址:https://www.cnblogs.com/the-capricornus/p/6841913.html
Copyright © 2020-2023  润新知