Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

06.08.2003, 20:15

Variablen - Deklarierung

Hallo!

@David: Warum deklarierst du die Variablen immer am Anfang der Funktion? Ist das schneller?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

06.08.2003, 21:15

Nein. War eine schlechte Angewohnheit, die ich mittlerweile nicht mehr habe :)
Es ist in der Tat sogar langsamer. Denn viele Funktionen können frühzeitig abbrechen, bevor manche Variablen überhaupt gebraucht werden.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

07.08.2003, 00:21

Ich würde sagen das hat Vor- und Nachteile.

Vorteil:
-Man sieht direkt was für Variablen (was für Typen und so) die Funktion braucht auf einen Blick.
-Etwas Ordentlicher (ansichtssache)
-Leichter zu Finden in der Funktion.

Nachteil:
-Langsamer (Okay soooo viel isses nun aber echt net ;))

Naja sonst fällt mir kein Nachteil ein :)

Anonymous

unregistriert

4

07.08.2003, 17:40

Warum sollte ein variabel block am Anfang langsamer sein? Das ist doch quak mit Soße…. Vielmehr weiß man doch dass die vielen Stack Allokationen zwischendurch langsamer sind. Hast wohl bei den vorlesugen über Compilerbau geppent?

5

07.08.2003, 18:49

Warum sollten die Stack Operationen zwischendurch langsamer sein als am Anfang? Die Stack Operationen hat man doch auf jeden fall. Ob nun am Anfang oder mitten drin, dürfte doch Wurscht sein.

Wenn ich mich recht erinnere hat Stroustrup gesagt, das es besser sei, Variablen erst dann zu Deklarieren wenn sie gebraucht werden.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

6

07.08.2003, 19:07

Zitat von »"DragonMaster"«

Wenn ich mich recht erinnere hat Stroustrup gesagt, das es besser sei, Variablen erst dann zu Deklarieren wenn sie gebraucht werden.


Kanns mir gut vorstellen, ich glaub der hatte dafür auch seine gründe :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

07.08.2003, 19:36

Es ist auf jeden Fall besser, sie mittendrin zu deklarieren.
Ein Beispiel:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// ******************************************************************
// Schnittpunkt zwischen einer Linie und einer Ebene berechnen (Linienabschnitt)
TRIBASE_API float tbLineHitsPlaneS(const tbVector3& vLineA,
                                   const tbVector3& vLineB,
                                   const tbPlane& Plane)
{
    // Richtungsvektor der Linie berechnen
    const tbVector3 vLineDir(vLineB - vLineA);

    // Nenner des Bruchs für s berechnen. Falls dieser gleich null ist, sind Linie
    // und Ebene parallel und es gibt entweder keinen oder unendlich viele Schnittpunkte.
    const float fDenominator = tbVector3Dot(Plane.n, vLineDir);
    if(fabsf(fDenominator) < 0.0001f) return -1.0f;

    // Streckenabschnitt des Schnittpunkts des Strahls berechnen
    const float s = -(tbVector3Dot(Plane.n, vLineA) + Plane.d) / fDenominator;

    // Liegt der Streckenabschnitt außerhalb von [0; 1], dann gibt es keinen Schnittpunkt,
    // da der Punkt außerhalb der Linie liegt.
    if(s < 0.0f || s > 1.0f) return -1.0f;

    // Es gibt einen Schnittpunkt!
    return s;
}


Wie man sieht, kann die Funktion bereits nach kurzer Zeit abbrechen, wenn fabsf(fDenominator) < 0.0001f. Würden nun alle Variablen am Anfang deklariert, so müsste auch Speicher für die Variable "s" reserviert werden, die aber erst nach dem möglichen Abbruch zum Einsatz kommt.

Werbeanzeige