Hallo Bernhard, Also ok, ich gebe zu, ich bin ein Dinosaurier, was C/C++ angeht, denn eigentlich nutze ich meinen Compiler mehr oder weniger als Super-Macro-Assembler ;-) Aber erklär mir doch mal, wie ein solcher struct zurückgebgeben wird. Denn a) er passt ggf. nicht (bei einem 80X86 Prozessor) in die Register b) Wenn man in Assembler den Stack erst nachher aufräumt, kann der Aufrufer natürlich daher seinen Rückgabewert bekommen. Wobei mir aber noch nicht klar ist, wie dass dann gehen soll. Kannst du mal einen Assembler-output davon erzeugen? (Assembler Egal) Würde mich mal interessieren. Es sei denn, du hast das unten genannte Beispiel durch einen C++ Compiler gescheucht, dann verstehe ich das ganze, denn die neuen C++ Compiler behandeln struct und class identisch und somit hast du keinen struct im eigentlichen sinne sondern eine class und damit übergibt der Compiler (mal wieder) eine Referenz. Oder liege ich da falsch? (Ich muss mir das mal anschauen, wenn ich zeit habe) Zu Java: Erwischt, bin halt ein Java-Hasser ;-) Nein, habe mich nur Rudimentär mit Java auseinander gesetzt. Aber alles als statisch zu deklarieren ist vielleicht auch nicht das Grüne vom Ei... ;-) - Arndt
Am Sonntag, 22. Juni 2003 13:20 schrieb Bernhard Walle: Hallo,
On Sun, 22 Jun 2003 at 12:27 (+0200), Arndt Stedler wrote:
Wenn du bisher BASIC Programmiert hast, wirst du die Notwendigkeit nicht so schnell einsehen. Als Tip: Schau dir mal JAVA an: Java kennt keine Globalen Variablen!
Java kennt statische Klassenvariablen. Wenn Du nur in einer Klasse programmierst (in der, in der sich die main-Methode befindet), jede Funktion statisch machst und mit statischen Klassenvariablen arbeitest, hast Du das selbe in gruen. Sowas wie eine globale Varialbe in C++ (wo es ja auch Klassen gibt) und globale Funktionen gibt es allerdings in Java nicht.
Ach so, zum Rückgabewert: In C kommt dieser, sofern er passt in einem oder mehreren Prozessorregistern zurück. Das ist der Grund, warum du auch keine Strukturen als Rückgabeparameter nehmen kannst sondern nur Referenzen oder Pointer.
Stimmt so nicht. Auch in C kannst Du eine struct und eine union zurueckgeben (nein, keinen Zeiger darauf), allerdings ist das modernes C und kein altes C. Auch der Zuweisungsoperator ist auf Strukturen definiert.
Ein saudummes Beispiel:
struct zeit { int stunde; int minute; int sekunde; };
struct zeit demo () { struct zeit meinezeit = { 1, 2, 3 }; return meinezeit; }
int main (int argc, char *argv[]) { struct zeit nocheinezeit;
nocheinezeit = demo(); printf("Std: %d\nMin: %d\nSek: %d\n", nocheinezeit.stunde, nocheinezeit.minute, nocheinezeit.sekunde);
return 0; }
Gruss, Bernhard
-- _________ http://www.bwalle.de _________________________________________________ "Nachrichtensprecher fangen stets mit 'Guten Abend' an und brauchen dann 15 Minuten, um zu erklären, dass es kein guter Abend ist." -- Rudi Carrell