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

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

551

07.03.2015, 22:37

Offizieller GLSL Validator in "StandAlone.cpp":

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void CompileAndLinkShaders()
{
    [...]
    glslang::TProgram& program = *new glslang::TProgram;
    [...]
    delete &program;
    [...]
}


Mir fehlen gerade die Worte.

552

08.03.2015, 09:53

Das funktioniert aber korrekt. Man hätte sich die Reference sparen können, aber so wie der Code da steht, funktioniert er in jedem Fall. new liefert auch nie 0 zurück und es wird auch nichts durch das = kopiert, da program eine Referenz ist. &program liefert die Adresse, die new zurückgeliefert hat.
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

553

08.03.2015, 12:25

Man sollte es aber auf den Stack anlegen.
Ich bekomme da eher den Eindruck, dass ein Java Programmierer am Werk war.

554

08.03.2015, 21:36

Vielleicht war der Datentyp zu groß für den Stack und das ist erst im Nachhinein aufgefallen und der Typ wollte den Code dazwischen nicht ändern?
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

555

08.03.2015, 22:03

Interessante Theorie, aber leider nicht richtig. Eigentlich wäre auch das schon wieder sehr fragwürdig.
"TProgram" ist 100 Bytes groß.

Es gab außerdem im Quellcode generell eine Neigung zu sehr vielen unnötigen Zeigern zu Objekten die im Konstruktor mit new allokiert und um Destruktor mit delete gelöscht wird. Ich denke, das hängt einfach mit einer schlechten Angewohnheit zusammen.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

556

25.03.2015, 10:56

Gerade auf ein Codestück gestoßen in dem jemand beweisen wollte das switch auch ohne break funktioniert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
switch(...) {
  case A:
    m = X;
  case B:
    if (!m)
      m = Y;
  case C:
    if (!m)
      m = Z;
...
}

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

557

25.03.2015, 11:19

Ein switch kann zwar auch ohne breaks sinnvoll sein, das ist aber wirklich eher die Ausnahme und in den meisten Anwendungsfällen (wie auch im gegebenen Beispiel) einfach nicht gegeben.
Das ist ungefähr das gleiche, als würde man behaupten, man könnte Bedingungen auch ohne "else if() {}" verwenden und als Beispiel "else { if() {} }" (mit entsprechender Einrückung) zeigen.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

558

25.03.2015, 17:42

Wobei das mit dem Switch da aufwendiger ist als if else-if anders zu schachteln. Wenn eine Sprache Features hat darf man sie aber auch gerne benutzen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Tobiking

1x Rätselkönig

  • Private Nachricht senden

559

25.03.2015, 18:41

Der Code den ich aktuell portieren muss ist eine echte Fundgrube. Insbesondere die riesigen switches der Form:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int ret1, ret2, ret3...
switch(...)
{
  case A:
    ret1 = doSomething();
    ...
    if(!ret1)
      goto verbindung_abbauen;
    ...
  verbindung_abbauen:
    return ret1;
    break;

  case B:
    ret2 = ...
...


Sehr witzig fand ich auch Konstrukte der Form

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct StructX
{
  int* value;
};

struct StructY
{
  int value;
};

// Variante 1
void f(StructX* xArray, int* i)
{
  *xArray[*i]->value = 5;
}

// Variante 2
void g(StructY* y, int* v)
{
  memcpy(&y->value, &v, sizeof(int));
}

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

560

25.03.2015, 19:26

Der typische unter Durchschnitt Programmierer wie er frisch aus seiner Fachinformatikerausbildung kommt ohne jemals vorher Code geschrieben zu haben?

Werbeanzeige