Was zusammen gehört wird direkt hintereinander übergeben:
Eigentliche Daten vor Metadaten, vor Steuerdaten. D.h. zum Beispiel
Pointer vor der Speichergrösse auf die der Pointer zeigt. Metadaten in
der Reihenfolge ihrer gefühlten Wichtigkeit. Steuerdaten, Flags, die das
Verhalten der Funktion steuern zuletzt.
Bei C++ müssen die Parameter mit Default-Werten sowieso ans Ende, da
kann man nicht immer die typische Reihenfolge einhalten.
Unterschiedliche Meinungen gibt es über die Reihenfolge von übergebenen
Daten und zurückgegebenen Daten.
Entweder:
Zurück vor übergeben: f(int *out1, double *out2, int in1, bool in2);
weil das der Reihenfolge bei einem Funktionsaufruf ähnelt out = f(in);
und weil es besser zu C++ Default-Argumenten passt.
Oder:
Übergeben vor zurück f(int in1, bool in2, int *out1, double *out2); weil
es angeblich flüssiger zu lesen ist.