char an Funktion übergeben

Hi,

ich weiss manchmal nicht, wann ich ' oder " verwenden muss.

Bei der seriellen Ausgabe via Serial.print wird ja " um die zu sendenden Zeichen gesetzt.
Baue ich ein Switch-Case-Konstrukt wird ' verwendet, wenn ich nach einem bestimmten Zeichen abfragen will.

Wie ist es nun, wenn ich ein einzelnes Zeichen (char) einer Funktion übergeben möchte?

Ist da dann function('L'); oder function("L"); richtig und vor allem warum?

Gruß Chris

'L' ist auf jeden Fall richtig. Das ist ein char. "L" ist ein string literal (const char array). Hier ein bisschen genaueres auf Englisch: What is the type of string literals in C and C++? - Stack Overflow

Chris72622:
Ist da dann function('L'); oder function("L"); richtig und vor allem warum?

In der Programmiersprache C/C++ werden char-Konstanten in einzelne Hochkommas eingeschlossen und nullterminierte Stringkonstanten (Textliterale) zwischen doppelte Hochkommas.

Also 'L' ist ein einzelner Großbuchstabe und "L" ist ein Zeichen langer (nullterminierter) String.

Die Serial.print Funktion kann als Parameter sowohl ein einzelnes Zeichen als auch einen nullterminierten String verarbeiten, also bei der Funktion wäre es egal, ob Du ihr ein einzelnes Zeichen übergibst oder einen ein Zeichen langen String.

Bei der seriellen Ausgabe via Serial.print wird ja " um die zu sendenden Zeichen gesetzt.

Das geht nur weil die Methode überladen ist. Und "T" ruft die gleiche Version auf wie "Test". Sauber ist trotzdem nicht, da "T" einen 2-Byte String im RAM anlegt.

switch/case geht in C/C++ nur mit Datentypen die implizit in Integer-Konstanten konvertierbar sind. In anderen Sprachen wie C# oder Java (aber erst in späteren Version) geht das teilweise auch mit Strings.

Ich würde ja mal ein C++ Grundlagen Buch oder Tutorial empfehlen.
Tipp:
Nicht nur unter das Kopfkissen legen, sondern auch lesen.

String und Char Definition/Verarbeitung sind Grundlagen.
Ich kann mir gar nicht vorstellen, wie man sich fast 5 Jahre mit Arduinoprogrammierung beschäftigen kann ohne je den Drang zu entwickeln, sich da kundig zu machen....
(zumindest bis jetzt... OK, besser spät als nie ...)

Ich will gar nicht wirklich wissen, was da sonst noch für klaffende Lücken sind....
(Doch! Ich will es wohl wissen, aus rein morbidem Interesse)

Hehehe. :stuck_out_tongue:

Gruß Chris

Ist da dann function('L'); oder function("L"); richtig und vor allem warum?

richtig: je nach dem
warum: weil die function eben so deklariert ist.

void function1 (char x) {}  
void function2(const char* msg) {}
void setup() { }

void loop() {
  function1('L');
  function2("L");
}
void functionX(char x) {}  
void functionX(const char* msg) {}
void setup() {}

void loop() 
{
  functionX('L');
  functionX("L");
}

Ich kann mir gar nicht vorstellen, wie man sich fast 5 Jahre mit Arduinoprogrammierung beschäftigen kann ohne je den Drang zu entwickeln, sich da kundig zu machen....

combie, das hatten wir doch schon :wink:
Ich werkel auch schon lange mit dem arduino rum, aber ob Du's glaubst oder nicht: ich habe bisher noch NIX mit chars und strings gemacht und sicherlich mit ganz vielen anderen Dingen die Du kennst auch nicht. Ist halt ne Frage was man machen möchte und wie viel Zeit man reinsteckt.

Nicht immer von sich auf andere schließen - geht meist in die Hose :smiling_imp:

Sehr richtig, combie. Danke für die Ergänzung.

Daher auch die berüchtigte Meldung

call of overloaded 'functionX(int)' is ambiguous

beim Aufruf von

 functionX(0);  // ambiguous
functionX(76); // OK, identisch zu 'L'

0 könnte bei Arduino auch ein Zeiger, und damit ein char* sein !