C/C++ 等效于 C# 参数

C/C++ equivalent to C# params

本文关键字:参数 C++      更新时间:2023-10-16
是否有等效于 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_listva_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});
}