Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 23.03.2005, 21:09 Titel: Sinnvolle Sachen fürs Dev. |
|
|
Hi,
hier werden ja oft diverse Dinge gefragt die eigentlich "Alltäglich" sind
Drum dachte ich mir, ich eröffne mal einen Thread wo jeder paar Sinnvolle Sachen (kleinere Funktionen, links, infopapers oder sonst was) posten kann
Falls es Code gibt können die member den ja verbessern falls es was zu verbessern gibt
Naja ich fang mal an:
Viele benutzen sowas:
CPP: | #define SAFE_RELEASE(x) if((x) != NULL){x->Release(); x=NULL;} | doch damit kann man natürlich viele Fehler machen wenn man z.B. kein COM-Objekt übergibt das von IUnknown abgeleitet wurde.
Deshalb hier eine kleine Templatelösung die man auch für andere sachen erweitern kann dank Templates : CPP: | template<typename T> inline void safeRelease (T*& unknown);
template<> inline void safeRelease<::IUnknown> (::IUnknown*& unknown)
{
if (unknown != NULL)
{
unknown->Release();
unknown = NULL;
}
}
|
So und nun ihr  _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 23.03.2005, 21:14 Titel: |
|
|
Für alle die es noch nicht wissen: Auch wenn Makros meist "doof" sind gibt es doch einige Einsatzbereiche die IMHO ohne gar nicht gehen.
Was man zum Beispiel sehr gut für ein Log Buch gebrauchen kann, ist folgendes Makro:
CPP: | #define DATAL(x) << x << " in " << __FILE__ << " Line: " << __LINE__
|
Wenn man nun diese Makro aufruft, etwa in einem LogBuch weiß man immer ganz genau, wos stand, was manchmal sehr nützlich sien kann. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 23.03.2005, 22:36 Titel: |
|
|
Habe noch etwas, was für die VC++6.0 User sicherlich interessant sein könnte:
VC++6.0 hat einen kleinen Fehler in Sachen scope für variabelndefinitionen.
Folgender Code ist ein voll zulässiger C++ Code, aber er wird nicht Compiliert auf dem VC++6.0
CPP: | int main (void)
{
// Schleife 1
for (unsigned long i=0; i<10; ++i)
foo ();
// Schleife 2
for (unsigned long i=0; i<10; ++i)
foobar ();
return 0;
}
|
VC++6.0 glaubt jetzt in der 2. Schleife das 'i' schon definiert ist, obwohl es laut Standard nur für die 1. Schleife definiert wurde
Diesen Bug kann man jedoch ganz leicht beheben mit dem PräProzessor:
CPP: | #define for if(false) else for |
Nun würde sich auch folgender Schleifenaufbau compilieren lassen:
CPP: | #define for if(false) else for
int main (void)
{
// Schleife 1
for (unsigned long i=0; i<10; ++i)
foo ();
// Schleife 2
for (unsigned long i=0; i<10; ++i)
foobar ();
return 0;
}
|
_________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
nigs Super JLI'ler
Anmeldedatum: 19.12.2002 Beiträge: 359
Medaillen: Keine
|
Verfasst am: 24.03.2005, 02:47 Titel: |
|
|
Patrick hat Folgendes geschrieben: | Habe noch etwas, was für die VC++6.0 User sicherlich interessant sein könnte:
VC++6.0 hat einen kleinen Fehler in Sachen scope für variabelndefinitionen.
Folgender Code ist ein voll zulässiger C++ Code, aber er wird nicht Compiliert auf dem VC++6.0
CPP: | int main (void)
{
// Schleife 1
for (unsigned long i=0; i<10; ++i)
foo ();
// Schleife 2
for (unsigned long i=0; i<10; ++i)
foobar ();
return 0;
}
|
VC++6.0 glaubt jetzt in der 2. Schleife das 'i' schon definiert ist, obwohl es laut Standard nur für die 1. Schleife definiert wurde
Diesen Bug kann man jedoch ganz leicht beheben mit dem PräProzessor:
CPP: | #define for if(false) else for |
Nun würde sich auch folgender Schleifenaufbau compilieren lassen:
CPP: | #define for if(false) else for
int main (void)
{
// Schleife 1
for (unsigned long i=0; i<10; ++i)
foo ();
// Schleife 2
for (unsigned long i=0; i<10; ++i)
foobar ();
return 0;
}
|
|
Hey cool, das Problem hatte ich auch schon, aber konnte mir nicht erklären woher es kam, denn der Gültigkeitsbereich der Variablen ist nur innerhalb der geschweiften Klammern.....
Thx, werds mir merkn...... |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.03.2005, 10:17 Titel: |
|
|
aber in der for Schleife sind die Variablen ja eben net in ner geschweiften Klamemr sondern in einer runden... _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
KI JLI Master

Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 24.03.2005, 11:26 Titel: |
|
|
Gut, dass beide Varianten bei VC .NET funktionieren. |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 24.03.2005, 11:45 Titel: |
|
|
Produziert dieses CPP: | #define for if(false) else for | nicht zusätzlichen Code, der das Kompilat länger macht? wenn if(false) wegoptimiert wird sind wir ja wieder beim Scope-Problem... Eventuell würde ich auch if(0) vorschlagen, weil false nicht unbedingt definiert ist - oder? _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 24.03.2005, 11:53 Titel: |
|
|
false, true, bool sind buildin-typen in einem C++ Compiler seit der 1. Generation. Da gibt es nichts dran zu rütteln, das ist so. _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 24.03.2005, 12:08 Titel: |
|
|
Wenn ich jetzt das i nach der Schleife noch nehmen will, weil ich den Wert brauche geht das nicht mehr? _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 24.03.2005, 16:24 Titel: |
|
|
Ah so, ich brauchs ja eh net
hattes dafür ->da es bei der std::list keinen []-Operator gibt: CPP: | long ID;
cin>>ID;
std::list<WTF>::iterator it=List.begin();
for(long i=0; i<List.capacity(); i++)
{
if(i==ID)
break;
it++;
}
// Hier hat dann it das gewünschte Element
|
Naja, besser als nichts...  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 24.03.2005, 16:33 Titel: |
|
|
Naja std::list wurd auch nicht für einen operator[] entwickelt, dafür ist der vector da Die beiden unterscheiden sich schon in ihrem Sinn  _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 24.03.2005, 16:35 Titel: |
|
|
Aber wenn ich nu ma std::list nehm will ich auch einen [] haben!  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 24.03.2005, 16:43 Titel: |
|
|
Naja, der Sinn einer Liste ist es wie bei einem Zug, das man nur vorne den Wagon abhängen kann oder ganz hinten. Ne list ist so wie ein Stack der von oben und unten bearbeitet werden kann
Für die Sachen für zwischen drin ist der vector da
Frag mal Deinen Mathelehrer zum Thema: "Unterschiede zwischen Listen und Vectoren", denn die Beiden kommen ja aus der Mathematik  _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.03.2005, 16:50 Titel: |
|
|
kann man nicht so verwegen sein, und einfach ne Klasse von der list ableiten, in der man den implementiert? Ich meine, man muss dafür ja bloß in ner Schleife die liste durchlaufen, und das Element zurückgeben. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
|