optionale Parameter in C?

(Firma: DC3AX) #646905
Lesenswert?
• ▲
▼
Hi!

Muss den Thread mal ausgraben...

Ich brauche eine Funktion mit variabler Anzahl Parameter in WinAVR. Ich 
kann aber keine varargs.h oder stdarg.h in den Includes von WinAVR 
finden. Da ich noch mitten am Portieren der Software bin, kann ich auch 
noch keinen vollständigen Compilerlauf machen. Ich bin aber schon so 
weit, dass ich bei folgender Routine...
1
int csh_PrintF( STRPTR formatString, ... )
2
{
3
  va_list vlist;
4
  int cnt;
5

6
  if( Gbl_BridgeModeActive)
7
    cnt = fprintf_P( VCOM, formatString, vlist);
8
  else
9
    cnt = fprintf_P( VCOM, formatString, vlist);
10
    return cnt;
11
}
...folgende Warning bekomme:
../bridge_drv.c:107: warning: 'vlist' is used uninitialized in this 
function

Unterstützt WinAVR variable Funktions-Definitionen nicht oder ist dieser 
Teil in einem anderen aufgegangen, oder kann ich die Warning ignorieren, 
bzw. irgendwie gezielt abschalten ohne mir andere Warnings bzgl. 
uninitialisierter Variablen zu verbauen?

Danke schon mal,
Ulrich
Persönliche Seite #646922
Lesenswert?
• ▲
▼
Nö, Du musst schon noch va_start aufrufen, um die Variable 'vlist' 
entsprechend zu initialisieren.
Woher soll der Compiler wissen, was Du damit vorhast?

Die Warnung ist daher vollkommen korrekt und sollte - wie andere 
Warnungen auch - nicht ignoriert werden.

Und fprintf weiß auch in der _P-Variante nichts mit einem Argument vom 
Typ va_list anzufangen.

Dazu ist eine der v-Versionen von printf (vprintf, vsprintf etc.) 
erforderlich.

Das sieht dann (in etwa) so aus:
1
void mein_printf(char* format, ...)
2
{
3
  va_list argptr;
4

5
  va_start(argptr, format);
6

7
  vprintf(Format, argptr);
8
}

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