Forum: PC-Programmierung Wie printf() kapseln


von Hugo Bossard (Gast)


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.

von Karl heinz B. (kbucheg)


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.

von Hugo Bossard (Gast)


Lesenswert?

Danke! Funktioniert bestens, Include von stdarg.h genügt.

:-)

von Karl heinz B. (kbucheg)


Lesenswert?

Pff. Glück gehabt. :-)
Ich hab solche Dinger schon ewig nicht mehr benutzt.

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
Noch kein Account? Hier anmelden.