Arduino上的变分函数
Variadic functions on Arduino
我正在Arduino 022中为Arduino Mini Pro编程。我有以下功能:
String join(const String str, ...) {
Serial.println("join");
va_list args;
va_start(args, str);
Serial.println("result init");
String result = "";
for (String strArg = str; strArg != NULL; strArg = va_arg(args, String)) {
Serial.println(result);
result += strArg + ARG_DELIMITER;
}
result = result.substring(0, result.length() - 1);
Serial.println("join end");
return result;
}
当我调用这个函数时,程序停止,引脚13中的内置LED亮起。"join"永远不会打印到串行监视器上。Arduino上不允许使用可变函数吗?
不能将大多数类类型传递给可变函数,只能传递POD类型(标准中5.2.2第7段(;如果你这样做,行为是不明确的——这可能会导致你遇到的问题。我确信Arduino String类不是POD,所以这是行不通的。
你最好使用字符数组(至少在某些地方(,例如
String join(char const * const str, ...)
如果这不会在调用站点造成太多的丑陋,或者可能只是为1到N个字符串提供重载。
此外,String对象是否可以等于NULL?你的strArg != NULL
测试看起来可疑。
当您调用代码时,它看起来像吗:
join( "foo", "bar", NULL ); // ok
或:
join( "foo", "bar" ); // wrong
你必须自己提供NULL终止符——编译器不会这么做。
Edit:这假设String是char*的typedef(因为您将其与NULL进行比较(,但如果是这样,则代码中还有很多其他错误。请澄清字符串的类型。
相关文章:
- Arduino C++在构造函数中用参数声明对象数组
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- Arduino SocketIoClient - 没有用于调用的匹配函数
- Arduino函数无法编辑数组
- Arduino 函数参数
- 在 C++ (Arduino) 中传递带有参数的函数作为参数
- Arduino IDE 中使用 strncmp 函数时出错
- 类中的 Arduino 对象构造函数设置垃圾值
- 将作业传递给另一个函数,而不会延迟 arduino
- C++ Arduino - 随机函数不起作用
- Arduino如何制作返回固定大小数组的函数
- 如何使用Arduino/C++将整个结构传入和传出函数
- 如何在我使用过的Arduino库之一中固定构造函数中的转换错误
- 当您希望在Arduino Uno编程中同时执行不同函数时,使用什么代码/语句
- Arduino函数无缘无故地更改参数
- 如何在 arduino 中传递函数参数
- Arduino / C++:通过引用将对象传递给构造函数
- Arduino 可覆盖函数
- 使用Arduino IDE的构造函数的未定义参考错误
- 如何在C++中创建一个返回字节数组的函数?Arduino项目