Wie printf() kapseln

Gast #386506
Lesenswert?
• ▲
▼
Hallo

Zu Testzwecken compiliere ich meinen Code für den V850 auf dem PC unter
GCC. Da ich auf dem PC mittels printf() schön in die Konsole schreiben
kann, auf dem Target jedoch auf ein Terminal, dachte ich, eine Funktion
zu basteln, welche, falls auf dem PC compiliert ein printf() aufruft,
falls auf dem Target, die entsprechende Sequenz für das Terminal:

void TraceFunkt(???)
{
#ifdef PC
  printf(Arg1, Arg2, ???);                    // Z1
#else
  sprintf(G_UartStr, Arg1, Arg2, ???);        // Z2
  UARTPrintF(G_UartStr);                      // Z3
#endif
}

Ich weiss aber nicht, wie ich das mit den Argumenten machen soll. Weiss
jemand Rat oder eine bessere Lösung?
Oder wie könnte ich die Zeile Z1 bzw. Z2/Z3 in ein Macro packen?

Bin dankbar für Hinweise.
#386507
Lesenswert?
• ▲
▼
Das Stichwort im Netz lautet
'variadische Funktionen'

Ich versuch mich mal daran. Nicht schlagen wenns
so nicht geht :-)

void TraceFunkt( const char* Fmt, ... )
{
  va_list ap;

  va_start( ap, Fmt );

#ifdef PC
  vprintf( Fmt, ap );
#else
  vsprintf( G_UartStr, Fmt, ap );
  UARTPrintfF( G_UartStr );
#endif

  va_end( ap );
}


Über die notwendigen Includes bin ich mir nicht im klaren.
Ich denke aber, stdarg.h sollte ausreichen.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.