www.mikrocontroller.net

Forum: Compiler & IDEs string senden über uart


Autor: Markus Reichert (markusreichert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe ein kleines Testprogramm (siehe unten) geschrieben, welches mir 
über den Uart eine Zeichenkette ausgeben soll.

Allerdings bekomme ich beim "Build" folgendes Warning:
../test2.c:94: warning: passing argument 1 of 'uart_puts' from 
incompatible pointer type

Das Programm ansich funktioniert. Die Zeichen werden richtig gesendet. 
Allerdings würde ich gerne das Warning verstehen.

Wäre super, wenn mir jemand einen Tip geben könnte, warum das Warning 
ausgegeben wird.

Danke und Gruß
Markus



...

void uart_puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        uart_putc(*s);
        s++;
    }
}


int main(void)
{

char zeichen[7] = {'a','b',0xFF,'d'};

...
     uart_puts(&zeichen); //dies ist Zeile 94 im Programm
...
  };
}

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bist du sicher, daß das funktioniert?

http://www.lysator.liu.se/c/c-faq/c-2.html

uart_puts erwartet einen pointer auf ein char.

zeichen ist ein array von chars. Als Funktionsparameter darf das wie ein 
pointer auf chars verwendet werden.
&zeichen ist ein pointer auf ein array von chars. Das ist vergleichbar 
einem pointer auf einen pointer auf char.

Richtig wäre:

uart_puts(char[] s)
{...}
uart_puts(zeichen);

aber
uart_puts(char* s)
{...}
uart_puts(zeichen);

ist auch erlaubt.

Oliver

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> uart_puts(char[] s)
> {...}
>
> uart_puts(char* s)
> {...}
>
> ist auch erlaubt.

Die Untertreibung des Jahres :-)
Beide Versionen sind absolut gleichwertig.
Historisch gesehen gab es ursprünglich nur
die Pointer Variante. Die Variante mit Array
Syntax ist erst sehr viel spaeter hinzugekommen
und hat einen grossen Nachteil: Sie suggeriert etwas
was nicht passiert. Auch bei der Variante mit Array
Syntax ist s immer noch ein Pointer. Die Array Sytax
ist nichts anderes als 'syntactic sugar' um den
Neulingen den Anblick von Pointern zu ersparen.
Sozusagen 'ein Pointer im Schafspelz'.


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
....'ein Pointer im Schafspelz'...

Muss ich mir merken...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.lysator.liu.se/c/c-faq/c-2.html

Seit anno '66 (oder so) des letzten Jahrtausends hat sich auch C etwas 
weiterentwickelt :-)

Oliver

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver wrote:
> http://www.lysator.liu.se/c/c-faq/c-2.html
>
> Seit anno '66 (oder so) des letzten Jahrtausends hat sich auch C etwas
> weiterentwickelt :-)
>

Wenn du auf 2.2 anspielst: Da gehts um ganz was anderes.
Bei Funktionsparametern sind [] und * absolut identisch.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.