这是用于简化设置 "pinMode" 的可变参数列表参数的安全/正确实现吗?

Is this a safe / correct implementation of a variadic list argument used to simplify setting "pinMode"?

代码(C++):

我是 C++ 的新手,所以我不确定这是否安全:

#include <Arduino.h>

void pin_mode(uint8_t pins[], uint8_t mode) {
  const int length = *(&pins + 1) - pins;
  for (size_t i = 0; (signed)i < length; i++) {
    pinMode(pins[i], mode);
  }
}

我有多个具有相同引脚设置的引脚,我想在一行中设置它们的值,而不是让 12 多行调用相同的函数。

用法:

pin_mode([PIN_1, PIN_2, PIN_3, PIN_4], OUTPUT);

这是安全/正确的实施方式吗?

如果我这样做,我会通过引用传递数组,这样编译器会为我计算它的大小:

#include <Arduino.h>

template <size_t N>
void pin_mode(uint8_t (&pins)[N], uint8_t mode) {
  for (size_t i = 0; i < N; i++) {
    pinMode(pins[i], mode);
  }
}

当然,如果您愿意,您可以自由使用 range-based for 循环。