Arduino上的变分函数

Variadic functions on Arduino

本文关键字:函数 Arduino      更新时间:2023-10-16

我正在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进行比较(,但如果是这样,则代码中还有很多其他错误。请澄清字符串的类型。