www.mikrocontroller.net

Forum: Compiler & IDEs eigenes printf --> funktioniert nur mit args


Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
ich habe eine vorhandene printf routine portiert um die ausgaben meines 
UARTS in printf style zu benutzen...
ich fuehre meine testroutine aus und das meiste funktioniert:
was nicht geht ist, wenn kein 2. argument im aufruf ist:
printf("%s\n\n", ptr);        --> funktioniert
printf("kleiner test\n",0);   --> funktioniert aber 0 sinnlos
printf("kleiner test2\n");    --> keine ausgabe
jemand ne idee?

thx

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

Bewertung
0 lesenswert
nicht lesenswert
Das hier
/* assuming sizeof(void *) == sizeof(int) */

int printf(const char *format, ...)
{
  register int *varg = (int *)(&format);
  return print(0, varg);
}

kommt mir dann doch sehr brutal vor.

Das hätte ich so nicht erwartet.

Was mich stutzig macht. Du arbeitest mit variadischen Funktionen, in 
deinem ganzen Code kommt aber nirgends va_list, va_start, va_end vor.

Hast du den Code aus einer vertrauenswürdigen Quelle?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum nimmst Du nicht die vorhandene printf Funktion aus der C-lib 
<io.h>

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

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:

> Das hätte ich so nicht erwartet.

Um das näher auszuführen.
Erwartet hätte ich
#include <stdarg.h>

static int print(char** out, const char* format, va_list varg)
{
  ....
}

int printf(const char* format, ...)
{
  int retVal;
  va_list arguments;

  va_start( arguments, format );
  retVal = print( NULL, format, arguments );
  va_end( arguments );

  return retVal;
}

int sprintf(char* out, const char* format, ...)
{
  int retVal;
  va_list arguments;

  va_start( arguments, format );
  retVal = print( out, format, arguments );
  va_end( arguments );

  return retVal;
}

und in print dann Zugriff über va_arg, wenn im Formatstring ein % 
auftaucht.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
erstmal Danke fuer die schnellen antworten.
habe das mit den va_list, va_start, va_end getestet aber es hat nicht so 
wirklich hingeheauen.
Jedoch frage ich mich selbst wieso ich nicht auf die idee gekommen bin 
die eigentlich printf umzulegen.
Nach entfernen dmeiner routinen und umlegen der eingebauten printf hat 
alles einwandfrei funktioniert!
Nachmal herzlichen Dank!

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.