当前位置: 首页 > news >正文

选择邯郸做网站北京互联网公司排名

选择邯郸做网站,北京互联网公司排名,罗源做网站的公司,中国建设人才网站文章目录 功能说明实现示例解析扩展 功能说明 宏检验条件是否成立,并返回指定的值 #define TU_VERIFY(...) _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, UNUSED)(__VA_ARGS__)TU_VERIFY(1) 检验为真,啥也不干TU_VERIFY(0) 校验为假&…

文章目录

    • 功能说明
    • 实现
    • 示例
    • 解析
    • 扩展

功能说明

宏检验条件是否成立,并返回指定的值

#define TU_VERIFY(...) _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, UNUSED)(__VA_ARGS__)
  • TU_VERIFY(1) 检验为,啥也不干
  • TU_VERIFY(0) 校验为,函数返回,返回值为 false
  • TU_VERIFY(87, 1) 检验为,啥也不干
  • TU_VERIFY(0, 100) 检验为,函数返回,返回值为 100

实现

// Helper to implement optional parameter for TU_VERIFY Macro family
#define _GET_3RD_ARG(arg1, arg2, arg3, ...)        arg3
#define _GET_4TH_ARG(arg1, arg2, arg3, arg4, ...)  arg4/*------------- Generator for TU_VERIFY and TU_VERIFY_HDLR -------------*/
#define TU_VERIFY_DEFINE(_cond, _handler, _ret)  do            \
{                                                              \if ( !(_cond) ) { _handler; return _ret;  }                  \
} while(0)/*------------------------------------------------------------------*/
/* TU_VERIFY* - TU_VERIFY_1ARGS : return false if failed* - TU_VERIFY_2ARGS : return provided value if failed*------------------------------------------------------------------*/
#define TU_VERIFY_1ARGS(_cond)                         TU_VERIFY_DEFINE(_cond, , false)
#define TU_VERIFY_2ARGS(_cond, _ret)                   TU_VERIFY_DEFINE(_cond, , _ret)#define TU_VERIFY(...)                   _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, UNUSED)(__VA_ARGS__)

示例

#include <stdio.h>
#include <stdbool.h>// Helper to implement optional parameter for TU_VERIFY Macro family
#define _GET_3RD_ARG(arg1, arg2, arg3, ...) arg3
#define _GET_4TH_ARG(arg1, arg2, arg3, arg4, ...) arg4/*------------- Generator for TU_VERIFY and TU_VERIFY_HDLR -------------*/
#define TU_VERIFY_DEFINE(_cond, _handler, _ret) \do                                          \{                                           \if (!(_cond))                           \{                                       \_handler;                           \return _ret;                        \}                                       \} while (0)/*------------------------------------------------------------------*/
/* TU_VERIFY* - TU_VERIFY_1ARGS : return false if failed* - TU_VERIFY_2ARGS : return provided value if failed*------------------------------------------------------------------*/
#define TU_VERIFY_1ARGS(_cond) TU_VERIFY_DEFINE(_cond, , false)
#define TU_VERIFY_2ARGS(_cond, _ret) TU_VERIFY_DEFINE(_cond, , _ret)#define TU_VERIFY(...) _GET_3RD_ARG(__VA_ARGS__, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, UNUSED)(__VA_ARGS__)static int verify_func(int cond, int value)
{TU_VERIFY(cond, value);return 0xa5;
}int main(int argc, char *argv[])
{printf("%x \r\n", verify_func(87, 1));printf("%x \r\n", verify_func(0, 100));return 0;
}

结果打印

a5
64

解析

  • 该宏最少传入一个参数,最多传入两个参数
  • __VA_ARGS__ 可以理解为占位符,当只有一个参数时,该宏展开为 _GET_3RD_ARG(xxx, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, UNUSED) 得到的就是 TU_VERIFY_1ARGS,所以执行的就是 TU_VERIFY_1ARGS(xxx)
  • 当有两个参数时,该宏展开为 _GET_3RD_ARG(xxx, yyy, TU_VERIFY_2ARGS, TU_VERIFY_1ARGS, UNUSED) 得到的就是 TU_VERIFY_2ARGS,所以执行的就是 TU_VERIFY_2ARGS(xxx, yyy)

扩展

handler 处理的功能

/*------------------------------------------------------------------*/
/* TU_VERIFY WITH HANDLER* - TU_VERIFY_HDLR_2ARGS : execute handler, return false if failed* - TU_VERIFY_HDLR_3ARGS : execute handler, return provided error if failed*------------------------------------------------------------------*/
#define TU_VERIFY_HDLR_2ARGS(_cond, _handler)           TU_VERIFY_DEFINE(_cond, _handler, false)
#define TU_VERIFY_HDLR_3ARGS(_cond, _handler, _ret)     TU_VERIFY_DEFINE(_cond, _handler, _ret)#define TU_VERIFY_HDLR(...)              _GET_4TH_ARG(__VA_ARGS__, TU_VERIFY_HDLR_3ARGS, TU_VERIFY_HDLR_2ARGS,UNUSED)(__VA_ARGS__)
  • 该宏最少传入两个参数,最多传入三个参数
  • __VA_ARGS__ 可以理解为占位符,当只有一个参数时,该宏展开为 _GET_4TH_ARG(xxx, yyy, TU_VERIFY_HDLR_3ARGS, TU_VERIFY_HDLR_2ARGS, UNUSED) 得到的就是 TU_VERIFY_HDLR_2ARGS,所以执行的就是 TU_VERIFY_HDLR_2ARGS(xxx, yyy)
  • 当有三个参数时,该宏展开为 _GET_4TH_ARG(xxx, yyy, zzz, TU_VERIFY_HDLR_3ARGS, TU_VERIFY_HDLR_2ARGS, UNUSED) 得到的就是 TU_VERIFY_HDLR_3ARGS,所以执行的就是 TU_VERIFY_HDLR_3ARGS(xxx, yyy, zzz)
http://www.hkea.cn/news/894165/

相关文章:

  • 定制网站多少钱北京seo网站管理
  • 南昌做网站公司哪家好如何建立独立网站
  • 成都解放号网站建设什么是百度竞价
  • 网站优化的基本思想与原则百度号码
  • 沧州网站建设制作设计优化深圳seo优化推广
  • 建立一个网站需要什么技术网上培训机构
  • 网站设计与管理论文百度账号注册平台
  • 网站空间商推荐seo是什么职位缩写
  • 怎么建设boss网站文件外链
  • 百度推广网站建设费百度搜索引擎的网址是多少
  • php 手机网站 上传图片定制网站建设
  • 关于网站建设的问题百度关键词分析
  • 登录官方网站装修公司网络推广方案
  • 设计网站官网入口网站搜索优化方法
  • 网站优化qq群山东做网站
  • wordpress icomoon太原seo快速排名
  • 中华建设杂志网站记者数据指数
  • 网站开发测试情况南召seo快速排名价格
  • 上海仓储公司小红书seo优化
  • 南京建设公司网站网络营销整合推广
  • wordpress更改语言沈阳seo优化
  • wordpress免费网站世界大学排名
  • 做网站的属于什么专业?百度爱采购竞价推广
  • 网站建设一年多少恰东莞网站到首页排名
  • 新企业网站应该怎么做SEO优化广告联盟有哪些
  • 手机app开发网站建设软文推广文章案例
  • 网站自然排名百度经验官网登录
  • dz网站模板沧州网站优化公司
  • 桂林论坛天涯社区培训行业seo整站优化
  • 做伊瑞尔竞技场的网站搜索引擎简称seo