Robert Bienert: dynmische variablen in c++

Beitrag lesen

Moin!

Aus meinen Tagen der Windows-Programmierung sowohl mit C als auch Delphi kenne ich, dass C-Funktionen standardmäßig als „cdecl“ betrachtet werden, d.h. die Argumente an die Funktion werden in einer bestimmten Reihenfolge auf den Stack gelegt, so dass C-Funktionen eine variable Anzahl an Argumenten entgegennehmen können. Außerdem ist die C-Funktion selbst dafür verantwortlich, beim Rücksprung den Stack in einem ordentlichen Zustand zu hinterlassen.

Nee, gerade andersrum: Nach cdecl ist die _übergeordnete_ Funktion für das Abräumen des Stacks nach dem Funktionsaufruf zuständig. Die aufgerufene Funktion kann dies nicht, da sie nicht "weiß", wieviele Argumente ihr übergeben wurden. Mit "pascal" deklarierte Funktionen tun das selber.

Stimmt, das kann man sich mit solchen C-Funktionen wie [link:http://www.freebsd.org/cgi/man.cgi?query=printf&apropos=0&sektion=3&manpath=deutsch+-+Linux%2FGNU&format=html@title=printf](const char *format, ...) gut merken.

Der andere wichtige Unterschied ist die Reihenfolge der Parameter, wie du richtig bemerkt hast: Bei "cdecl" wird die Parameterliste von rechts nach links abgearbeitet, der erste Parameter kommt also zuletzt auf den Stack;

Das ermöglicht dann auch die variable Anzahl an Argumenten, wobei ich der Funktion einen festen Parameter als erstes übergeben muss (im Fall von printf ist dies format), der als erstes in meiner Funktion landet, damit die Funktion darauf schließen kann, wieviele Parameter folgen.

bei "pascal" dagegen von links nach rechts, in normaler Leserichtung.

Deshalb haben Pascal-Funktionen eine feste Anzahl an Argumenten.

Danke für die Erklärung, jetzt habe ich endlich einmal verstanden, was es damit auf sich hat!

Viele Grüße,
Robert