Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于调用函数的宏

用于调用函数的宏
EN

Stack Overflow用户
提问于 2017-03-07 17:47:17
回答 2查看 13.5K关注 0票数 3

我需要一个宏(或函数,但最好是宏),它接受函数名和无限数量的参数,然后将参数传递给函数。假设这个宏是MACROFOO

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define MACROFOO(function, ...)     /* what do I put here?? */

int foo_bar(int x, int y)
{
    // do stuff
}

int main(void)
{
    int x = 3;
    int y = 5;

    MACROFOO(foo_bar, x, y);    // calls foo_bar(x, y)
}

我怎么定义这样的宏呢?我想做一些类似这样的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define MACROFOO(function, args...)     (function)(args)

但它看起来像是将...传递给函数,而不是实际的参数。我该怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-07 17:56:07

您可以使用__VA_ARGS__扩展各种宏的...

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define MACROFOO(function, ...)  (function)(__VA_ARGS__)

MACROFOO(printf, "hello world%c", '!') 
/*^ expands to: (printf)("hello world%c", '!') */

注意:您可能知道,圆括号阻止function参数作为宏展开(如果它是宏)。

也就是说,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define BAR(...) myprintf(__VA_ARGS__)
MACROFOO(BAR, "hello world%c", '!')

将扩展到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(BAR)("hello world%c", '!')

使用括号和

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myprintf("hello world%c", '!')

如果您删除了它们。

票数 7
EN

Stack Overflow用户

发布于 2017-03-07 18:09:02

您可以使用标准变量参数__VA_ARGS__

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define MACROFOO(function, ...)  (function)(__VA_ARGS__)

或者,如果您想要一个更具描述性的名称,您可以通过在...前面写一个名称来使用这个GNU CPP扩展:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define MACROFOO(function, parameters...)  (function)(parameters)

(...) 变量宏是C99中的一项新功能。GNU CPP支持它们已经有很长一段时间了,但只支持一个命名的变量参数(‘args...’,而不是‘...’和__VA_ARGS__)。

如果您考虑到以前版本的GCC的可移植性,则应该仅使用命名变量参数。另一方面,如果您关心到其他符合C99规范的实现的可移植性,则应该只使用__VA_ARGS__.

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42654888

复制
相关文章
B+树索引使用(7)匹配列前缀,匹配值范围(十九)
上篇文章索引的代价,b+树占的空间比较大,增删改对b+树每个节点的索引排序影响也很大,时间耗费长,所以没有必要不要乱建索引,还介绍了索引的最左原则和全值查询。
用户9919783
2022/07/26
9990
基因注释:区间范围匹配
今天,有老师问我一个问题,如果从一个区间匹配到另一个的区间范围,并找出来。我觉得比较有代表性,就写篇博客总结一下。
邓飞
2022/12/13
7020
基因注释:区间范围匹配
正则表达式范围匹配
近期小编在进行评测语料的制作时,涉及到一些复杂字符串的过滤和提取等内容,例如找出某一句话中在某个特定语句结构下出现的文字,虽然使用循环,if-else等语句可以搞定,但是比较麻烦,使用正则表达式处理就比较方便。
用户5521279
2020/03/19
3.2K0
时间范围内查找
特殊说明: 以上文章,均是我实际操作,写出来的笔记资料,不会盗用别人文章!烦请各位,请勿直接盗用!转载记得标注来源!
收心
2022/10/28
6200
mysql 根据时间范围查询
如果传入的格式是YYYY-MM-DD 的 没有带时分秒,按照上面两种写法会差不全。
全栈程序员站长
2022/09/13
4.8K0
Postgresql模糊匹配案例(包括中文前后模糊)
test 04 使用对应的pattern ops走索引在zh_CN也是列时也走索引
mingjie
2022/05/12
2.4K0
elui实现时间范围筛选
效果图 [2022-03-08_070538.png] 实现步骤 el-date-picker页面使用 <el-form-item label="报修时间"> <el-date-picker v-model="dateRange" size="small" style="width: 240px" value-format="timestamp" type="daterange"
用户6493868
2022/03/08
9010
时间范围占比工具类
/** * 时间范围占比 * * @param st 开始时间戳 * @param et 结束时间戳 * @param cst 对比开始时间戳 * @param cet 对比结束时间戳 * @return 占比 * @author liushouyun */ public static Tuple2<Integer, Double> proportionOfTimeRange(long st, lon
房上的猫
2020/02/20
6310
时间控件(选择时间范围的插件)「建议收藏」
后台开发,一般都是有筛选条件的查询,那么问题就来了,根据日期范围搜索的情况下,插件要怎么选????
全栈程序员站长
2022/08/25
5.4K0
时间控件(选择时间范围的插件)「建议收藏」
python 计算周的范围时间
week_len = ["", 2, 3, 4] week_time_list = ["2021-09-06", "2021-09-27"] ne = [] print(week_time_list) for j in range(0, len(week_len)): c = ne[-1] if len(ne) > 0 else week_time_list[0] end_date = datetime.strptime(c, '%Y-%m-%d') now_date_end =
Wyc
2021/09/23
1.6K0
python 计算周的范围时间
element-ui 日期时间选择框picker-options如何禁用时间范围( 多个时间范围判断 )
1. element-ui 算是我们在开发中用到最多的pc端 ui框架,今天公司正好有一个需要用到 date-picker 的日期插件
小蔚
2023/07/10
8520
element-ui  日期时间选择框picker-options如何禁用时间范围( 多个时间范围判断 )
GWAS分析后的基因注释:区间范围匹配
图1是SNP的上下游区间,图2是基因的上下游区间,想以图1为标准,将区间内有基因的行放到右边。
邓飞
2023/09/06
9580
GWAS分析后的基因注释:区间范围匹配
linux shell grep 匹配多个字符 和向下匹配多行范围 用法
cat 1.txt | grep -v -E "ok=2|changed|TASK" # grep -v 不匹配, # -E 匹配多个 用管道隔开 | cat 1.txt | grep -A 3 "date" # grep -A 3 在匹配字符date 往下3三行的所有数据 -A是显示匹配后和它后面的n行。 -B是显示匹配行和它前面的n行。 -C是匹配行和它前后各n行。
eisc
2021/06/21
5.4K0
bootstrap-datepicker限定可选时间范围
实际应用中可能会根据日期字段查询某个日期范围内的数据,则需要对日期选择器可选时间进行限制,
全栈程序员站长
2022/09/10
1.8K0
bootstrap-datepicker限定可选时间范围
最后更新修改时间提示【可配置时间范围】
原文:https://laolion.com/archives/2547.html 今天在老狮的博客里到一个类似的博文,于是在本站也弄了一个,但样式并不符合我的审美,所以参照了一下Joe6.1版的时间提示样式改了改。
用户7162790
2022/03/23
6170
判断当前时间是否在某个时间范围内
判断当前时间是否在某个时间范围内 各种活动在接口判单当时间是否在【活动】范围内——小时-分钟 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class CutTime { /** * 判断是否满足时间内 * @param CutTime限制时间 * @return */ public static boolean cutTime(String
红目香薰
2022/11/28
1.7K0
PHP 获取 特定时间范围 类
目录 前序   用途   功能及事项   使用方法   代码及注释 前序:   总体来说,我更应该是一个 android 移动开发者,而不是一个 phper,如果说只做移动端的 APP ,我也不会学
林冠宏-指尖下的幽灵
2018/01/03
2.2K0
sequlize 查询时间范围和多表查询
前端传参时间范围 如:createdAtFrom = '', createdAtTo = '' ,并且在后端接收参数后给的默认值 ''
用户4793865
2023/01/12
2.6K0
Mysql时间范围查询不走索引问题
此时,虽然在create_time字段上添加了索引,但是否会走索引还需要看数据量的情况。
程序新视界
2022/05/06
4.7K0
oracle对时间范围比较的语句
一般在数据库语句中直接写某个时间条件例如:c_datetime<= ‘2014-08-06’或者between time1 and time2是会出错
粲然忧生
2022/09/28
1.1K0

相似问题

Django中的syncdb和更新数据库模式

10

django syncdb和更新的模型

70

更新到1.4后Django syncdb异常

116

django fabric syncdb

10

django中syncdb的问题

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文