0

I have an Arduino sketch that passes an array into a method as a compound literal, but for some reason I keep getting the following error:

void setup() { }
void printConcatLine(char chunks[][20]) { }

void loop() {  
  printConcatLine((char[][20]){ "{", "255", "}" });
}

I've also tried passing the number of the pointers/length of the array, and explicitly terminating it:

void setup() { }
void printConcatLine(char *chunks[]) { }

void loop() {  
  printConcatLine((char*[]){ "{", "255", "}", NULL });
}

...and

void setup() { }
void printConcatLine(char chunks[][20]) { }

void loop() {  
  printConcatLine((char[][20]){ "{", "255", "}", "" });
}

But they both produce the same error.

What is the correct method of passing the compound literal array as a method parameter?

8
  • You can't. You have to assign it to something then pass that variable.
    – Majenko
    Commented Jun 7, 2020 at 20:28
  • Either that or rewrite your function to use variadic arguments.
    – Majenko
    Commented Jun 7, 2020 at 20:29
  • Is this limitation specific to Arduino? From what I understand you can do this in C. Commented Jun 7, 2020 at 20:31
  • I am not sure, but I suspect it's a consequence of the AVR being a Modified Harvard Architecture CPU.
    – Majenko
    Commented Jun 7, 2020 at 20:32
  • 1
    stackoverflow.com/questions/32941846/…
    – Majenko
    Commented Jun 7, 2020 at 20:34

1 Answer 1

2

You can't with the Arduino. I am not quite sure why, but I think it may be because it's a Modified Harvard architecture machine.

You can better achieve what you want with variadic arguments, however:

void printConcatLine(int num, ...) {
    va_list ap;
    const char *s;

    va_start(ap, num);
    for (int i = 0; i < num; i++) {
        s = va_arg(ap, const char *);
        Serial.print(s);
    }
    va_end(ap);
    Serial.println();
}

void setup() {
    Serial.begin(115200);
    printConcatLine(3, "{", "255", "}");
}

void loop() {

}

The first argument is the number of arguments that follow, and all the rest are string constants.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.