2016-07-10 4 views
1

In Funktion mit variabler Anzahl von Argumenten wird das "erste Argument" als "Gesamtzahl der Argumente" übergeben. Aber in printf() erwähnen wir nie Argumentanzahl. Also, wie erfährt es über die gesamte Argumentliste? Wie funktioniert printf()?Wie funktioniert printf() ohne explizite Argumentanzahl

+1

[Vielleicht kann das helfen] (https://www.eskimo.com/~scs/class/int/sx11b.html) –

+2

Es gibt ein Argument für jeden Formatbezeichner (außer für %%) und für jeden * in einem Formatspezifizierer. – immibis

+2

Vielleicht hilft das: https: //www.quora.com/How-is-printf-implementiert –

Antwort

3

Schauen wir uns auf printf Vereinbarungsstruktur:

int printf(const char *format, ...) 

format ist eigentlich die Zeichenfolge, die den Text enthält, zu stdout geschrieben werden.

Die enthaltenen eingebetteten Format-Tags werden später durch die in nachfolgenden zusätzlichen Argumenten angegebenen Werte ersetzt, und das Format wird entsprechend festgelegt.

3

Sie liefern keine Argumentanzahl an printf - Sie liefern jedoch eine Format-Zeichenfolge - und das gibt an, wie viele Argumente printf erwarten sollte.

Sehr grob gesprochen ist die Anzahl der % Zeichen im Format String die Anzahl der Argumente (obwohl die Realität ein bisschen komplizierter ist).

1

Konvertierungsspezifizierer im String-Format printf die Anzahl und Arten von Argumenten sagen, eserwarten sollte - beispielsweise die Formatstring "there are %d vowels in %s\n"printf erzählt zwei Argumente neben dem Format-String zu erwarten, der erste Typ ist int und der zweite ist char *.

Es liegt an Ihnen sicherzustellen, dass die Argumente mit der Formatzeichenfolge übereinstimmen. Wenn Sie nicht genügend Argumente übergeben oder die Argumenttypen nicht dem entsprechen, was die Formatzeichenfolge erwartet, lautet das Verhalten undefiniert (am wahrscheinlichsten verzerrte Ausgabe oder ein Laufzeitfehler). Wenn Sie zu viele Argumente übergeben, werden die zusätzlichen Argumente ausgewertet, aber ansonsten funktioniert die Funktion normal, solange die Formatzeichenfolge erfüllt ist.

bearbeiten

Chapter and verse

7.21.6.1 Die fprintf Funktion
...
        Die fprintf Funktion schreibt Ausgabe an den Stream zu spitz durch stream , unter der Kontrolle der Str Inkl. von format, die angibt, wie nachfolgende Argumente für die Ausgabe konvertiert werden. Wenn für das Format nicht genügend Argumente vorhanden sind, ist das Verhalten nicht definiert. Wenn das Format bei verbleibenden Argumenten erschöpft ist, werden die überschüssigen Argumente (wie immer) ausgewertet, ansonsten aber ignoriert. Die Funktion fprintf wird zurückgegeben, wenn das Ende der Formatzeichenfolge gefunden wird.
+0

Ich bin mir ziemlich sicher, dass dein letzter Satz irgendwo nicht * * * fehlt. – tofro

+0

@tofro: siehe meine Bearbeitung. –