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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren