记一个宏定义写法
记一个宏定义写法
最近在看libevent源码,看到一个有趣的宏写法。特此记录。方便日后巩固学习。
源码写法:
#define HT_FIND(name, head, elm) name##_HT_FIND((head), (elm))
首先来简单分析一下:
-
定睛一看是一个宏,##是连接符
-
在vscode鼠标悬停该宏调用处,就清晰明了了
// 源码 dent = HT_FIND(event_debug_map, &global_debug_map, &find);// 鼠标悬停在宏上查看扩展,扩展如下 #define HT_FIND(name,head,elm) name ## _HT_FIND((head), (elm)) 扩展到: event_debug_map_HT_FIND((&global_debug_map), (&find))
接下来模仿该写法写个例子:
#define FUNC(name, value1, value2) name##_INT((value1), (value2))int add_INT(int a, int b)
{cout << "add = " << a + b << endl;return a + b;
}int mul_INT(int a, int b)
{cout << "mul = " << a * b << endl;return a * b;
}int sub_INT(int a, int b)
{cout << "sub = " << a - b << endl;return a - b;
}int main()
{FUNC(add, 9, 2);FUNC(mul, 9, 2);FUNC(sub, 9, 2);return 0;
}
输出结果:
add = 11
mul = 18
sub = 7
我相信看完例子你就明白这种写法了。非常方便。仔细看看是不是这个宏的调用有点像线程定义的写法。比如说我们定义一个相加功能的线程:
thread t1{add, 1, 6};
相关文章:
记一个宏定义写法
记一个宏定义写法 最近在看libevent源码,看到一个有趣的宏写法。特此记录。方便日后巩固学习。 源码写法: #define HT_FIND(name, head, elm) name##_HT_FIND((head), (elm))首先来简单分析一下: 定睛一看是一个宏,##是连接符…...
【数据结构】C语言实现栈(详细解读)
前言: 💥🎈个人主页:Dream_Chaser~ 🎈💥 ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--C语言实现栈 目录 什么是栈 栈的概念及结构 实现栈的方式 链表的优缺点: 顺序表的优缺点: 栈…...
3、Spring_容器执行
容器执行点 1.整合 druid 连接池 添加依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version> </dependency>1.硬编码方式整合 新建德鲁伊配置 <?xml version"1.…...
五、pikachu之RCE
文章目录 1、RCE概述2、exec "ping"3、exec"evel"4、连接符 1、RCE概述 RCE(emote command/code execute):可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。 远程系统命令执行 …...
最大不相交区间数量
给定 N 个闭区间 [ai,bi],请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。 输出可选取区间的最大数量。 输入格式 第一行包含整数 N,表示区间数。 接下来 N 行,每行包含两个整数 ai,…...
Oracle给表空间添加容量
假如给SYSTEM表空间添加 查看文件位置和容量:Select * FROM DBA_DATA_FILES; FILE_NAME就是要修改的文件 查看每一个表空间的容量,单位MB: SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tablespaces…...
2023年大数据与区块链国际会议 | EI、Scoups检索
会议简介 Brief Introduction 2023年大数据与区块链国际会议(ICBDB 2023) 会议时间:2023年11月17 -19日 召开地点:中国西安 大会官网:www.icobdb.org 2023年大数据与区块链国际会议(ICBDB 2023)…...
【洛谷算法题】P1000-超级玛丽游戏【入门1顺序结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P1000-超级玛丽游戏【入门1顺序结构】🌏题目描述🌏输入格…...
ubuntu or kylinos软件安装错误的终极解决方案
一、前言 所谓的软件安装,不管是那个系统,都是通过一定的方法把文件从源复制到目的,然后做一些配置工作,使其能正常的运行,卸载。 对于Linux来说,其目录的高度组织化,以及各软件依赖关系的复杂性,使得软件包数据库显得非常重要。 简单来说,软件包数据库最主要记录两…...
30分钟Python自动化从入门到实战(一)
第一章:自动化测试基础 第一节 软件测试分类 关于软件测试领域名词颇多,发现有许多测试新手混淆概念,从不同的角度可以将软件测试有不同的分类的方法;所以,这里汇总常见软件测试的相关名词,对软件测试领域有个概括的…...
FOC之SVPWM学习笔记
一、参考资料 【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术 - 知乎FOC入门教程_zheng是在下的博客-CSDN博客DengFOC官方文档技术干货 |【自制】FOC驱动板 二、FOC控制算法流程框图 在FOC控制中主要用到三个PID环,从内到外依次是:电流环、速度环、位…...
DSO 系列文章(3)——DSO后端正规方程构造与Schur消元
文章目录 DSO代码注释:https://github.com/Cc19245/DSO-CC_Comments...
php 使用ES
Download Elasticsearch | Elastic <?phprequire vendor/autoload.php;use Elasticsearch\ClientBuilder;$client ClientBuilder::create()->build();# 索引一个文档 # Version 7.11 $params [index > my_index,id > my_id,body > [testField > abc] ];$…...
距离我成为炎帝的一次(比较近的一次)
sj登录—专业IT笔试面试备考平台_牛客网 这是dfs的一道基础题,可惜我还是没有学会 但是有时候错误也是一种成长方式 我的代码E题带路 #include<bits/stdc.h> //#define int long long using namespace std;const long long MAX1e310; //lon…...
Protobuf在IDEA中的插件安装教程
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
中间件(上)
1、何为中间件: 中间件(Middleware)是指位于操作系统和应用程序之间的一层软件层,用于提供各种服务和功能,以帮助不同的应用程序、系统或组件进行通信、交互和协作。中间件可以看作是在不同计算机或系统之间建立连接和…...
Python快速检验数据分布
假设检验的前提是确定数据的分布,本文介绍Python检验数据样本是否服从一定分布。使用方法是柯尔莫可洛夫-斯米洛夫检验(Kolmogorov–Smirnov test,K-S test),K-S检验方法适用于探索连续型随机变量的分布,对…...
uniapp微信小程序点击右上角菜单分享功能权限配置
个人项目地址: SubTopH前端开发个人站 (自己开发的前端功能和UI组件,一些有趣的小功能,感兴趣的伙伴可以访问,欢迎提出更好的想法,私信沟通,网站属于静态页面) SubTopH前端开发个人站…...
【OpenVINOSharp】在英特尔® 开发者套件爱克斯开发板使用OpenVinoSharp部署Yolov8模型
在英特尔 开发者套件爱克斯开发板使用OpenVinoSharp部署Yolov8模型 一、英特尔开发套件 AIxBoard 介绍1. 产品定位2. 产品参数3. AI推理单元 二、配置 .NET 环境1. 添加 Microsoft 包存储库2. 安装 SDK3. 测试安装4. 测试控制台项目 三、安装 OpenVINO Runtime1. 下载 OpenVINO…...
Django的模型层
Django的模型层1.Model的开发流程2.定义Model模型3.Model模型的实例4.Model模型的实战操作笔记开发流程1.在models.py中定义模型类,要求继承自models.Model2.生成迁移文件3.执行迁移5.定义属性1.字段类型2.字段选项3.关系模型实例1.类的属性2.创建对象3.实例的属性模…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
