variadic-functions相关内容

用 C 语言生成宏?

我想让 C 预处理器为我生成宏(即,我只使用 C99).我会写一个宏 #define make_macro(in) 当我放的时候 make_macro(name1)make_macro(name2) 在后面的代码中,它会扩展为 #define name1(...) name1_fn(name1_info, __VA_ARGS__)#define name2(. ..
发布时间:2022-01-11 19:30:08 其他开发

可变参数函数(va_arg)不适用于浮点数?

我有一个带有浮点参数的可变参数函数.为什么它不起作用? va_arg(arg, float) 解决方案 对应于 ... 的函数的参数在传递给可变参数函数之前提升.char 和 short 提升为 int,float 提升为 double 等. 6.5.2.2.7 函数原型声明器中的省略号会导致参数类型转换在最后一个声明的参数之后停止.默认参数提升是在尾随参数上执行的. 原因是早期 ..
发布时间:2022-01-09 10:43:26 其他开发

为什么 printf() 将浮点数提升为双精度数?

来自之前的问题:p> 如果您尝试将 float 传递给 printf,它将被提升为 double在 printf 收到之前 printf() 是可变参数函数吗?那么可变参数函数是否在传递 float 参数之前将其提升为 double? 解决方案 是的,可变参数函数的浮点参数被提升为双精度. C99 标准草案部分 6.5.2.2 函数调用说: [...] 和论据具有 fl ..
发布时间:2022-01-09 10:08:41 C/C++开发

如何将多个原始参数传递给 AsyncTask?

有相关问题,比如如何将 2 个参数传递给 AsyncTask 类?,但是我遇到了将多个原语作为参数传递给 AsyncTask 的尝试徒劳无功的困难,所以我想分享我的发现.现有的问题和答案中没有体现这种微妙之处,因此我想帮助任何遇到与我相同问题的人,并为他们省去痛苦. 问题是这样的:我有多个 原始 参数(例如两个 long),我想将它们传递给要在后台执行的 AsyncTask——怎么做?(我的 ..

如何在模拟类似 Haskell 解决方案的 F# 中编写可变参数函数?

我如何(如果有的话)模拟可变参数函数(不是方法)以便我可以编写 sum 1 2 3总和 1 2 3 4 5总和 1 2 3 4 5 6 7//等等. 上面的代码只是一个示例 - 显然,如果我必须总结一个列表,那么 [ 1;2 ;3] |>列表总和 是一个更好的方法. 不过,我正在寻找一个结构相似的解决方案,例如 这个 Haskell 解决方案 同样重要的是函数调用和参数值的正常 ..
发布时间:2022-01-05 09:55:49 其他开发

Java“参数"在方法签名中?

在C#中,如果你想让一个方法有一个不确定数量的参数,你可以将方法签名中的最后一个参数设为params,这样方法参数看起来像一个数组,但允许每个人使用该方法根据调用者的需要传递尽可能多的该类型的参数. 我相当确定 Java 支持类似的行为,但我不知道如何去做. 解决方案 在 Java 中,它被称为 varargs,语法看起来像一个常规参数,但在类型后面有一个省略号(“..."): p ..
发布时间:2021-12-29 19:38:56 Java开发

为什么要使用 params 关键字?

我知道这是一个基本问题,但我找不到答案. 为什么要使用它?如果你编写了一个函数或一个使用它的方法,当你删除它时,代码仍然可以完美地工作,100% 没有它.例如: 带参数: static public int addTwoEach(params int[] args){整数总和 = 0;foreach(args 中的 var 项)总和 += 项目 + 2;返还金额;} 无参数: s ..
发布时间:2021-12-29 19:32:18 C#/.NET

在 C 中使用 varargs 的示例

在这里我发现了一个如何在 C 中使用 varargs 的示例. #include 双平均(整数计数,...){va_list ap;国际 j;双倍 = 0;va_start(AP,计数);//需要最后一个固定参数(获取地址)for(j=0; j 我只能在一定程度上理解这个例子. 我不清楚为什么我们使用 va_start(ap, count);.据我了解,通过这种方式,我们将迭代器设置为它 ..
发布时间:2021-12-29 19:01:35 其他开发

Java 9 中集合的重载便利工厂方法有什么意义

Java 9 带有用于创建不可变列表的便利工厂方法.最后创建一个列表很简单: Listlist = List.of("foo", "bar"); 但是这个方法有 12 个重载版本,11 个带有 0 到 10 个元素,一个带有 var args. static 列表of(E... 元素) Set 和 Map 也是如此. 既然有 var args 方法,那么多出 11 个方法有什么 ..
发布时间:2021-12-27 17:39:47 Java开发

如何使用可变参数和反射

简单的问题,如何让这段代码工作? 公共类 T {public static void main(String[] args) 抛出异常 {新 T().m();}公共//正如 Bozho 提到的void foo(String ... s) {System.err.println(s[0]);}void m() 抛出异常 {String[] a = new String[]{"hello", "ki ..
发布时间:2021-12-26 14:20:15 Java开发

Java 泛型和可变参数

我想用泛型和可变参数实现一个函数. 公开课问题{公共静态void doNastyThingsToClasses(Class parent, Class... classes) {/***这里有东西***/}公共静态类 NotQuestion {}公共静态类 SomeQuestion 扩展问题 {}公共静态无效主(字符串 [] args){doNastyThingsToClasses(Obj ..
发布时间:2021-12-25 13:29:40 Java开发

如何实现“可变模板"使用 pre-c++0x(VS2008)?

我使用的是 Visual Studio 2008,我想实现字符串格式化功能没有变量参数列表. 如何使用 pre-c++0x(VS2008) 实现“可变模板"? 有没有像 boost 一样实现这个的库? 或者另一种实现方式? 这是我的示例代码.(当然,这是无法编译的,因为我使用的是 VS2008.) bool VarPrint(std::ostringstream& out ..
发布时间:2021-12-24 15:32:18 C/C++开发

可变参数 Java 歧义调用

我对 Java 的 varargs 方法有点困惑: public static int sum(int ...a) {返回0;}公共静态双和(双...a){返回 0.0;} 当我尝试在不传递任何参数的情况下调用 sum() 时,会调用方法的 int 版本.我不明白为什么;通常编译器必须引发错误. 相比之下,当我尝试不带任何参数调用 sum 时,以下代码会生成编译器错误: public ..
发布时间:2021-12-23 09:00:08 Java开发

不明确的可变参数方法

这是一个无法编译的代码示例: 公共类测试{公共静态无效主(字符串 [] args){方法(1);}公共静态无效方法(int ... x){System.out.println("可变参数");}公共静态无效方法(整数... x){System.out.println("单");}} 有人能告诉我这些方法含糊不清的原因吗?提前致谢. 解决方案 考虑方法签名 public static ..
发布时间:2021-12-23 08:55:08 Java开发

gcc 中如何实现可变参数?

int max(int n, ...) 我使用 cdecl 调用约定,调用者在被调用者返回后清理变量. 我想知道宏 va_end、va_start 和 va_arg 是如何工作的? 调用者是否将参数数组的地址作为第二个参数传递给max? 解决方案 如果你看看 C 语言在堆栈上存储参数的方式,宏的工作方式应该就清楚了:- 上位内存地址 最后一个参数倒数第二个参数....第二个 ..
发布时间:2021-12-18 22:49:26 其他开发