2017-02-23 3 views
-4

cstdarg kann verwendet werden, um eine variable Anzahl von Argumenten in C++ zu haben.Ist es sicher, cstdarg zu verwenden?

Lassen Sie uns Schritt für Schritt gehen. Nachdem die Funktion aufgerufen wurde, werden die Argumente der Reihe nach in den Stapel geschoben.

Wenn ich unendlich viele Argumente Stackoverflows geben und der PC abstürzt.

Ist das korrekt? Wenn ja, ist es nicht gefährlich für jemanden, cstdarg zu benutzen?

+1

Durch diese Logik ist es unsicher, einen Zeiger zu verwenden, da er möglicherweise nicht auf ein gültiges Objekt zeigt. –

+2

Was ist cstdarg.h? Meinst du ""? –

+3

_ "Wenn ich unglaublich viele Argumente stackoverflows gebe und der PC abstürzt. Ist das korrekt? Wenn ja, ist es nicht unsicher für jemanden, cstdarg zu benutzen?" _ Das ist eine komplette Non-Sequitur. Wie um alles in der Welt sind Sie zu diesem Schluss gekommen? Wenn du zum Beispiel bei 6999999 MPH fährst, wirst du zusammenbrechen und Menschen sterben; Macht das alle Autos "unsicher für jedermann"? Nein. –

Antwort

0

Jeder echte C++ - Compiler ist durch reale physikalische Einschränkungen und Naturgesetze eingeschränkt. Der C++ - Standard berücksichtigt dies, indem er "Implementierungsgrenzwerte" in Anhang B spezifiziert und Implementierungen benötigt, um ihre tatsächlichen Grenzen zu dokumentieren. Der Standard empfiehlt auch einen Mindestwert für jedes dieser Grenzwerte.

Das Limit, nach dem Sie suchen, ist wahrscheinlich "Argumente in einem Funktionsaufruf", dessen empfohlene Mindestanzahl 256 in C++ 14 ist. Konsultieren Sie die Compiler-Dokumentation für das tatsächliche Limit.

Sobald Sie das Kontrollkästchen aktiviert haben, können Sie variable Argumente bis zur Grenze Ihrer persönlichen Plattform verwenden. Es ist sinnvoll, tragbaren Code zu senden, der die empfohlenen Grenzwerte des Standards einhält. (Benutzer, deren Compiler das empfohlene Minimum nicht einhalten, würden sich dessen bewusst sein und sorgfältig aufpassen.)

+0

Vielen Dank für Ihre freundliche Antwort. Kerrek SB –

+0

Das bedeutet nicht notwendigerweise, dass die Übergabe von 256 Argumenten sicher ist. Typischerweise erlegen Compiler keine festen Grenzen auf; variable Grenzen können vom verfügbaren Speicher abhängen. Sie können möglicherweise 256 Argumente in einem Fall übergeben, aber in einem anderen Fall ist möglicherweise nicht genügend Speicher verfügbar, da er von anderen Dingen verbraucht wird oder weil die Argumente groß sind. –

+0

@KeithThompson: Das stimmt; In gewissem Sinne wissen Sie im Allgemeinen nicht, ob Sie überhaupt irgendeine Funktion aufrufen dürfen, wenn Sie nicht den vollständigen Kontext haben, da Sie sich möglicherweise am Ende des Aufruf-Stacks befinden. –

Verwandte Themen