zoukankan      html  css  js  c++  java
  • linux c 宏定义

    #if 1
    #define DEBUGP(fmt, ...) printf("%s(%d): "fmt" ", __func__, __LINE__, ##__VA_ARGS__)
    #else
    #define DEBUGP(fmt, ...)
    #endif

    将宏的值转换为字符串

    #define __STR__(s)     #s
    #define STR(s) __STR__(s)

    #define SETMAC_FACTORY_START 0x7ec0000

    STR(SETMAC_FACTORY_START ) // 转换完后 "0x7ec0000"

    #运算符 
    出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串。有时把这种用法的#称为字符串化运算符。例如:

    #definePASTE(n)"adhfkj"#n

    main()
    {
    printf("%s/n",PASTE(15));
    }
    宏定义中的#运算符告诉预处理程序,把源代码中任何传递给该宏的参数转换成一个字符串。所以输出应该是adhfkj15。

    ##运算符 
    ##运算符用于把参数连接到一起。预处理程序把出现在##两侧的参数合并成一个符号。看下面的例子:

    #defineNUM(a,b,c)a##b##c
    #defineSTR(a,b,c)a##b##c

    main()
    {
    printf("%d/n",NUM(1,2,3));
    printf("%s/n",STR("aa","bb","cc"));
    }

    最后程序的输出为:
    123
    aabbcc
    千万别担心,除非需要或者宏的用法恰好和手头的工作相关,否则很少有程序员会知道##运算符。绝大多数程序员从来没用过它。

  • 相关阅读:
    正则表达式
    小弟新从csdn搬迁到博客园,欢迎大家关注
    做完牛腩新闻发布系统之后的收获(牛腩总结)
    ValidateRequest="false" 无效
    sql server小技巧-自动添加时间与主键自增长
    css初接触
    Spark的Rpct模块的学习
    插入排序
    选择排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/listenerln/p/10223509.html
Copyright © 2011-2022 走看看