C/C++ 等效于 C# 参数
C/C++ equivalent to C# params
是否有等效于 C
# 参数的 C/C++?
这
C#:
public static void UseParams(params int[] list) {
for (int i = 0; i < list.Length; i++) {
Console.Write(list[i] + " ");
}
Console.WriteLine();
}
UseParams(1, 2, 3, 4); // UseParams(int ..........)
我需要在 C/C++ 中执行此操作:
void updateJsonArray_INA(INA3221DATA _channel1, INA3221DATA _channel2, INA3221DATA _channel3) {
}
我可以这样做吗?
void updateJsonArray_INA(INA3221DATA _channel1, _channel2, _channel3) {
}
在 C 语言中,有一个称为可变参数函数的特性。此功能几乎等同于 C# 参数,只是您必须为参数提供大小或类似的东西,这是因为 C 中低级数组的性质。
#include <stdio.h>
#include <stdarg.h>
void use_params(int number_of_params, ...) {
va_list args;
va_start(args, number_of_params);
for(int i = 0; i < number_of_params; ++i) {
some_type element = va_arg(args, some_type);
do_something_with(element);
}
va_end(args);
}
void main() {
use_params(4, 'a', 'b', 'c', 'd');
}
这种方式是关于性能或灵活性的最佳选择(您可以拥有多种类型的多个参数(。
但是如果你不喜欢使用va_list
,va_start
,...并且更喜欢更容易阅读的东西,std::vector
是去哪里。请注意,std::vector
是一个C++功能,因此如果您的系统仅支持 C,其中可变参数函数是唯一的选择,它将不可用。
#include <iostream>
#include <vector>
void use_params(const std::vector<int>& params) {
for(size_t i = 0; i < params.size(); ++i) {
do_something_with(params[i]);
}
}
void main() {
use_params({1, 2, 3, 5});
}
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用