美文网首页
C++可变参数宏

C++可变参数宏

作者: 深海龙虾 | 来源:发表于2020-05-08 16:34 被阅读0次

格式

  • C99开始支持如下可变参数宏
#define LOG( format, ... ) fprintf( stdout, format, ##_VA_ARGS_)
  • GCC同样支持如下格式
#define LOG( format, args...) fprintf( stdout, format, ##args)

连接符,在展开如将每一个arg展开了arg加上逗号,如果args为空时,##会去掉多余的逗号。

如果只是想将参数考入到缓存,可以使用
vsprintf

将参数展开:

log( format, ...)
{
     va_list l;
     va_start( l, format );
     for(;;)
          type value = va_arg( l, arg type);
     va_end( l );
}

实现

typedef char* va_list;
//内存对齐,求参数占用内存数
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(n)-1))

#define va_start(ap, v) (ap=(va_list)&v + _INTSIZEOF(v)) //第一个参数地址
#define va_arg(ap, t) (*(t*)((ap += _INTSIZEOF(t)) - _INSTSIZEOF(t)))//下一个参数地址,从地址往低地址。
#define va_end(ap) (ap=(va_list)0)

相关文章

  • C++可变参数宏

    格式 C99开始支持如下可变参数宏 GCC同样支持如下格式 连接符,在展开如将每一个arg展开了arg加上逗号,如...

  • CPP常识 04 -- 宏,#号##号,可变参数

    文章来自于这里:c语言中的宏,#号##号,可变参数 C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于...

  • iOS开发:Debug与Release版本NSLog屏蔽方法

    简单介绍以下几个宏: 1) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,...

  • 转 iOS开发debug跟release版本log屏蔽方法

    简单介绍以下几个宏: 1) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,...

  • iOS打印Debug日志的方式

    简单介绍以下几个宏: 1) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,...

  • 自定义NSLog 参数的含义

    关于自定义NSLog 1.__VA_ARGS__是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99...

  • ##__VA_ARGS

    __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只...

  • C++常用的宏

    可变参数列表 VA_ARGS用来表示可变参数列表 宏里面预设的变量 ANSI C标准中有几个重用标准预定义宏:LI...

  • iOS开发debug跟release版本NSLog屏蔽方法

    简单介绍以下几个宏: VA_ARGS 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有g...

  • NSlog宏定义

    1. VA_ARGS 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有...

网友评论

      本文标题:C++可变参数宏

      本文链接:https://www.haomeiwen.com/subject/srafnhtx.html