zoukankan      html  css  js  c++  java
  • 宏定义&CodeBlocks&Glib

    一、gcc的参数中
    -Dmacro             等价于代码里   #define macro
    -Dmacro=value  等价于代码里   #define macro value
    -Umacro            等价于代码里    #undef macro

    二、宏定义时 , 
    斜杠("")是用来续行,
    "#"用来把参数转换成字符串,是给参数加上双引号。
    "##"则用来连接前后两个参数,把它们变成一个字符串,
    "#@"是给参数加上单引号。
     例如
    #define Conn(x,y) x##y
     #define ToChar(a) #@a 
     #define ToString(x) #x
     
    int n = Conn(123,456);   
    结果n=123456;
     char* str = Conn("asdf""adf")
    结果str = "asdfadf";
     char a = ToChar(1);
    结果a='1';
     char* str = ToString(123132);
    结果str="123132";
     
    三、在CodeBlocks里使用-D定义值为字符串的宏,存在Bug
     
    如:定义Glib的G_LOG_DOMAIN的日志域宏时,在编译选项里加入
    -DG_LOG_DOMAIN="plugin_dispatch"   构建时提示 plugin_dispatch未定义,明显是宏预处理时,把双引号丢掉了。
    解决办法是使用gmacros.h的#define    G_STRINGIFY_ARG(contents)    #contents
    G_LOG_DOMAIN=G_STRINGIFY_ARG(plugin_dispatch)
    构建提示syntax error near unexpected token `('
    改成G_LOG_DOMAIN="G_STRINGIFY_ARG(plugin_dispatch)"构建成功
     
  • 相关阅读:
    go学习中的零散笔记
    git reset --hard与git reset --soft的区别
    php必学必会
    gdb 解core
    php学习
    高仿京东到家APP引导页炫酷动画效果
    RxHttp
    SVN回滚文件
    遍历枚举
    python3 多线程
  • 原文地址:https://www.cnblogs.com/xuybin/p/3175438.html
Copyright © 2011-2022 走看看