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)"构建成功
     
  • 相关阅读:
    Heap(堆)和stack(栈)有的区别是什么。
    i++和++i的深入理解
    JDBC之java数据库的连接与简单的sql语句执行
    java前三本基础知识总结
    数据库的一些基础
    SQL 同时查看2个表
    JMeter 问题
    Linux 常用命令
    java io (一)
    验证密码必须是字母加数字的组合
  • 原文地址:https://www.cnblogs.com/xuybin/p/3175438.html
Copyright © 2011-2022 走看看