首页 > 其他分享 >c宏实现批量设置参数

c宏实现批量设置参数

时间:2023-04-28 23:11:10浏览次数:33  
标签:__ VA 批量 ... ARGS 参数 设置 EACH define

点击查看代码
#define FOO(name) (uint64_t)name ,

#define EMPTY()
#define DEFER(id) id EMPTY()

#define FOR_EACH(macro, x, ...) CAT(FOR_EACH_, ff(__VA_ARGS__)) (macro, x, ## __VA_ARGS__)
#define FOR_EACH_0(macro, x, ...) macro(x) DEFER(FOR_EACH_I)() (macro, __VA_ARGS__)
#define FOR_EACH_1(m, x) m(x)
#define FOR_EACH_I() FOR_EACH

#define _PRIMITIVE_CAT(x, y) x ## y
#define CAT(x, y) _PRIMITIVE_CAT(x, y)

#define EVAL(...)  EVAL1(EVAL1(EVAL1(__VA_ARGS__)))
#define EVAL1(...) EVAL2(EVAL2(EVAL2(__VA_ARGS__)))
#define EVAL2(...) EVAL3(EVAL3(EVAL3(__VA_ARGS__)))
#define EVAL3(...) EVAL4(EVAL4(EVAL4(__VA_ARGS__)))
#define EVAL4(...) EVAL5(EVAL5(EVAL5(__VA_ARGS__)))
#define EVAL5(...) __VA_ARGS__

#define ff(...) _ff(0, ## __VA_ARGS__, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)
#define _ff(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, N,...) N

#define log(x) kk x
#define kk(...) CAT(kk_, ff(__VA_ARGS__)) (__VA_ARGS__)
#define kk_1(...) ({})
#define kk_0(...) ({ uint64_t a[] = {	EVAL(FOR_EACH(FOO, ## __VA_ARGS__ )) } ;\
printf("%d uu", sizeof(a)/sizeof(uint64_t));\
})

标签:__,VA,批量,...,ARGS,参数,设置,EACH,define
From: https://www.cnblogs.com/yiniansiji/p/17363369.html

相关文章

  • 帝国cms目录权限设置详细讲解
    帝国cms目录权限设置详细讲解时间:2022年08月18日 / 来源:网络 / 编辑:佚名 安装时需要设置权限的目录列表/(不用应用于子目录)/d/s/search/index.html/e/admin/ebak/bdata   /e/admin/ebak/zip   /e/admin/template/data   /e/class/e/data/e/DoPrint/i......
  • 设置wordpress:隐藏 自豪地采用WordPress 链接(wordpress 6.2)
    一,未隐藏前的效果说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest     对应的源码可以访问这里获取: https://github.com/liuhongdi/     或: https://gitee.com/liuhongdi说明:作者:刘宏缔邮箱:[email protected]......
  • centos 7.5 防火墙的设置
    1、开启端口//zone--作用域//add-port=80/tcp--添加端口,格式为:端口/通讯协议//permanent--永久生效,没有此参数重启后失效firewall-cmd--zone=public--add-port=3306/tcp--permanent//开启3306端口后,workbench或naivcat就能连接到MySQL数据库了2、常用命令一个服......
  • MFC-SetWindowLong设置窗口样式、窗口标识符ID、处理函数
     修改样式LONGStyles;Styles=GetWindowLong(hWnd4,GWL_STYLE);//获取原窗口风格/*参数1:HWNDhWnd窗口句柄参数2:intnIndex改变窗口上的何种属性*/LONGl=SetWindowLong(hWnd4,GWL_STYLE,Styles|LVS_REPORT);//设置新的......
  • 设置光标位置
    设置光标位置 源文件如下:<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><HTML><HEAD><TITLE>设置光标</TITLE><METANAME="Generator"CONTENT="EditPlus"><METANAME="Author&qu......
  • go语言 数组和切片、可变长参数、maps、字符串、指针、结构体、方法、接口
    数组和切片数组#1定义,初始化,使用#2数组是值类型数字,字符串,布尔,数组,都是值类型,真正直接存数据切片,map,指针引用类型,是个地址,指向了具体的值#3数组长度#4循环打印数组#5多纬数组#6数组定义并赋初值,把第99赋值为1,其他都是0#数组的长度也......
  • CDialogBar窗口的悬浮设置
    (1)创建Dialog后将其设置为ToolWindow,其它和CDialogBar要求一样(2)在OnCreat里添加代码       if(!m_Bar.Create(this,IDD_HISTOGRAM,CBRS_LEFT,ID_VIEW_HISTOGRAM)){TRACE0("Failedtocreatedialogbar/n");return-1;......
  • vue3 ts 网易云信 未读数 手动设置已读已废弃
    vue3ts网易云信未读数//未读数清空$uikit.resetSessionUnread(store.sessionId.value);调用接口nim.resetSessionUnread('sessionId')重置会话未读数。将此会话未读数置为0,之后收到消息重新计算未读数。调用接口nim.setCurrSession('sessionId')设置当前会话。将此会......
  • EAS_在扩展UICTEx中,打开弹窗,将参数传到弹窗页面中,
    这里有个需求:在扩展的UICTEx里的代码里,打开新的窗口,并传参过去 这里我们需要用到对象 BOSUIContext,现在UICTEx.java里将参数作为存到map,作为参数传过去,然后在打开的窗口的onload方法里就可以用 getUIContext().get("voucherId") 来获取值或对象 ......
  • Pytest自动化测试框架常用参数
    一、常用参数1.指定执行文件/用例不带参数,仅带文件名/文件相对路径/文件绝对路径测试文件::测试类:执行指定类测试文件::测试类::用例:执行指定用例2.短命令选项-v:输出详细信息-q:简化输出信息-k:根据关键字表达式执行-x:失败则退出执行-m别名:只执行被标记的用例、-s:输出......