GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie entferne ich diese Warnung:zweiter Parameter von „va_start“ nicht letztgenanntes Argument?

Sie müssen size verwenden statt fmt :

va_start(args, size);

Es ist size , nicht fmt , das ist der letzte Parameter, der einen expliziten Namen hat (im Gegensatz zu vararg-Parametern, die keinen Namen haben). Sie müssen den letztgenannten Parameter an va_start übergeben damit es die Adresse im Speicher herausfinden kann, an der die vararg-Parameter beginnen.


second parameter of ‘va_start’ not last named argument

Was bedeutet es und wie wird es entfernt?

Ihre Funktion hat die Parameter parent benannt , fmt und size . Die C-Spezifikation besagt, dass Sie immer den zuletzt genannten Parameter an va_start übergeben müssen , für die Kompatibilität mit älteren Compilern. Sie müssen also size bestehen , nicht fmt .

(Aber mit einem modernen Compiler könnte es trotzdem funktionieren)


Ich denke, hier gibt es eine Verwirrung:Die meisten Leute beschäftigen sich nur mit prinf-ähnlichen Funktionen, die format und varargs haben. und sie denken, dass sie den Parameternamen übergeben müssen, der das Format beschreibt. va_start hat jedoch nichts mit einem printf-ähnlichen Format zu tun. Dies ist nur eine Funktion, die den Offset auf dem Stack berechnet, wo unbenannte Parameter beginnen.


Linux
  1. Wie sortiere ich die Ausgabe nach Größe?

  2. So beheben Sie den Vi/Vim-Editor-Fehler – E319:Entschuldigung, der Befehl ist in dieser Version nicht verfügbar

  3. So erhalten Sie die Verzeichnisgröße in Linux

  4. So funktioniert ein Linux-Server

  5. Wie entferne ich X Bytes vom Ende einer großen Datei, ohne die gesamte Datei zu lesen?

So entfernen Sie ein Verzeichnis in Linux

So verwenden Sie du Command unter Linux

So entfernen Sie das Git-Remote-Repository

So finden Sie die letzte Anmeldung unter Linux

Wie entferne ich eine CLOSE_WAIT-Socket-Verbindung?

So deaktivieren Sie WARNUNG:apt hat keine stabile CLI-Schnittstelle ...