Ich weiß, dass ich niemals solch eine Grenze erreichen würde, wenn ich guten Praktiken folge. Allerdings muss ich eine automatisch generierte Funktion mit Losen von Parametern verwenden (und ich kann nichts damit ändern, ich empfange die Funktion von jemand anderem).Gibt es eine maximale Anzahl von Parametern für Funktionen in C mit dem gcc (bzw. MinGW) Compiler?
Also: Wie viele Parameter kann ich maximal in gcc verwenden? MinGW?
Ich habe this über die C++ - Sprachspezifikation gefunden. Und this über die C-Standard-Grenzwerte. Was mich interessiert, ist die Frage, was die Grenzen der "realen Welt" sind/Einzelheiten der Implementierung. Vor allem in gcc und MinGW.
Auch: Welche Art von Fehlermeldung könnte ich erwarten, wenn ein solches Limit erreicht wird? Und macht die Verwendung des C-Codes in einer C++ - Anwendung über die extern "C"
Deklaration für das "normale" C-Limit einen Unterschied? Es können hier andere Grenzen als die Anzahl von Parametern gelten, z. etwas wie eine maximale Zeilenlänge? Oder die maximale Stapelgröße?
Danke!
wie ich weiß (und Ihr erster Link sagt) das Limit ist 256 Argumente in C++ und 127 in c. Die Zeilenlänge ist kein Problem, da Sie eine Zeile in mehrere Zeilen aufteilen können. Die Stapelgröße wird nur ein Problem sein, wenn Sie riesige Strukturen als Argumente (nicht Zeiger auf die Strukturen) haben. – mch
Das ist, was der Standard als "minimale" Zahlen angibt (Ich habe die entsprechenden Beiträge in meiner Frage verknüpft). Was ich gerne wissen möchte, ist die "echte" Zahl, die Einschränkungen eines bestimmten Compilers. Zeilenlänge: Ich bin mir nicht sicher, aber ich dachte, der Präprozessor entfernt sowieso irgendwelche Zeilenumbrüche usw. (der Grund, warum wir das ";" am Ende jeder Zeile brauchen) - also bricht man sie in mehrere Zeilen (was ich habe Natürlich macht es keinen Unterschied, denke ich. Stackgröße: Ok, ich muss nur Zeiger übergeben, also scheint das keine Einschränkung zu sein. – mozzbozz
Es ist wahrscheinlich ABI, Prozessor und Compiler spezifisch. Ich nehme an, dass du ein x86-64 hast.Dann * in der Praxis * ist das Limit auf Stack-Frame und Stack-Größe bezogen, also denke ich, du könntest ein paar tausend Argumente übergeben. Und ich schlage vor, dass Sie einen einfachen Test machen: Schreiben Sie ein Skript, das für ein Argument N eine Funktion von N Argumenten in einer Datei erzeugt (z. B. die Summe aller Argumente berechnet), und in einer anderen Datei ein 'main' ruft . –