这是用于简化设置 "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
循环。
代码(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
循环。