Maximale Anzahl von Parametern in der Funktionsdeklaration
Ich weiß, dass eine minimale Anzahl von Parametern in Funktion definition null ist, aber was ist die maximale Anzahl der Parameter in der Funktionsdefinition? Ich bin mit der Frage nur für die um des Wissens Willen und aus Neugier, nicht, dass ich schreiben werde, um eine echte Funktion.
InformationsquelleAutor der Frage Nawaz | 2011-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es gibt Grenzen, die mit der Umsetzung. Ihre Antwort ist in den Fett gedruckten text in den folgenden Auszug aus der C++ - Standard.
1. C++ - Sprache
Anhang B - Implementierung Mengen
Außerdem heißt es auch, dass in $18.3/6,
InformationsquelleAutor der Antwort Nawaz
2. C-Sprache
5.2.4.1 Übersetzung Grenzen
Die Umsetzung soll in der Lage sein, um übersetzen und ausführen mindestens ein Programm ,
enthält mindestens eine Instanz jeder die folgenden Einschränkungen:
— 127 verschachteln von Ebenen der Blöcke
— 63 Verschachtelungen bedingte Eingliederung
— 12-Zeiger, array, Funktion und declarators (in allen Kombinationen) ändern
Arithmetik, Struktur, union oder unvollständiger Typ in einer Erklärung
— 63 Verschachtelungen eingeklammerte declarators in einer vollständigen Nichtigerklärung
— 63 Verschachtelungen werden auch die eingeklammerten Ausdrücke innerhalb einer vollen Ausdruck
— 63 bedeutenden ersten Zeichen in einen internen Bezeichner oder ein makro-name (jeder
universal-Zeichen-name oder erweitert-source-Charakter ist als eine einzige
Zeichen)
— 31 Erster, wichtiger Charaktere in einem externen identifier (jeder universal-Zeichen-name
die Angabe einer Kurzbezeichnung der 0000FFFF oder weniger als 6 Zeichen, jeweils
universal-Zeichen-name-Angabe eine Kurzbezeichnung der 00010000 oder mehr ist
als 10 Zeichen, und jedes erweiterte source-Charakter gilt das gleiche
Anzahl von Zeichen als die entsprechenden universellen Charakter-Namen, wenn vorhanden)
— 4095 externen Bezeichner in einer übersetzung Einheit
— 511-Bezeichner mit block scope deklariert sind, werden in einem block
— 4095 makro-Bezeichner gleichzeitig in einem preprocessing translation unit
— 127-Parameter in einer Funktion definition
— 127-Argumente in einem Funktionsaufruf
— 127-Parameter in einer makro-definition
— 127-Argumente in einem makro-Aufruf
— 4095 Zeichen, die in einer logischen Zeile
— 4095 Zeichen in einer Zeichen-string-literal oder wide-string-Literale (nach Verkettung)
— 65535 bytes in ein Objekt (in einer gehosteten Umgebung nur)
— 15 verschachtelungsebenen für #include-Dateien
— 1023 case-labels für switch-Anweisung (ohne diejenigen, die sich für jeden verschachtelten switch
Aussagen)
— 1023 Elemente in einer einzigen Struktur oder union
— 1023-enumeration-Konstanten in einer einzelnen Aufzählung
— 63 lev els von verschachtelten Struktur-oder union-Definitionen in eine einzige struct-declaration-list
Jedoch, heißt es in den Anmerkungen, die,
InformationsquelleAutor der Antwort Nawaz
Als die vorherigen Beantworter haben ausreichend darauf hingewiesen, die Anzahl der Parameter ist abhängig vom C++ - compiler. Die compiler-limit kann gut sein, aufgrund von Einschränkungen durch die hardware-Umgebungen.
Beispielsweise die VAX CPU-Architektur verwendet ein 8-bit-Feld enthält die Anzahl der Argumente, also kompatibel VAX-code übergeben kann nicht mehr als 255 Parameter.
Ebenfalls viele kleine Prozessoren wie den Intel 8048-Familie sind so eingeschränkt, für die Erinnerung, dass die meisten C und C++ - Compiler geben, die Trauer wenn Sie mehr über die vier Parameter verwendet werden. Während viele mainstream-Entwickler können Schmähung der 8048, seine Nachkommen bleiben eine der am häufigsten eingesetzten CPUs—meist in embedded-Geräten.
Viele RISC-Architektur Implementierungen geben Sie eine parameter-passing-Methode die Verwendung von Registern, eher als der stack. Ein basic-ARM-CPU, zum Beispiel, hat nur 16 Registern. Die maximale Anzahl der Parameter, könnte auch davon abhängen, compiler, Kommandozeilen-Optionen, die beeinflussen, wie es generiert code zur übergabe von Parametern. Vielleicht mehr als acht geschoben werden, auf einem stack. Vielleicht auch nicht.
Wenn diese Beispiele scheinen sehr restriktiv, beachten Sie, dass die Palm OS beschränkt eine C-Funktion auf einen einzigen parameter, und das musste der Typ
int
odervoid *
.InformationsquelleAutor der Antwort wallyk
Natürlich, wenn Sie schreiben einer Funktion in C mit einer so großen Anzahl von Argumenten, die Sie wahrscheinlich wollen ein Umdenken in der Gestaltung Ihres Programms.
InformationsquelleAutor der Antwort Sri Raghavan