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 ... }; }
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
> 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'.
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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.