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

28.05.2004, 21:15

Codestil, warum was so sein muss was auch anders geht.

hallo,


bisher hat ich immer folgende zeile im code:

Quellcode

1
HINSTANCE hDLL = LoadLibrary("tralalala.dll");


Das sollte bezwecken, das eine DLL auf die funktiionen in ner anderen zugreifen kann.

Durch zufall merkt ich aber, das ist garnich notwendig.
Es reicht die lib einzubinden und
__ declspec funktion extern sowieso zu schreiben.

Frage nun: ich hab das irgendwo so gesehn, weiß nich mehr wo, aber was soll das, welchen sinn hat loadlibrary, wenn der auch ohne das an die funktionen kommt??

achja und was is der unterschied zwischen if (NULL == variabel) und if (variable == NULL) und if (variable) ?
bewirkt doch auch das selbe oder warum drehen manche das?

und noch was was ich irgendwo gesehn hab und nicht versteh:

irgendwo im code am anfang einer funktion wenn das device benötigt wird:
"Local_lpDirect3DDevice = global_lpDirect3DDevice"

toll aber eigentlich reicht auch ein global oder hat das nebenwirkungen? hab nix gemerkt auch wenn ich immer nur mit ein device arbeite.
(programm läuft ja bei einen thread-programm auch nur einmal durch).

unsigned int

Alter Hase

Beiträge: 512

Wohnort: Bonn

Beruf: Schüler; C#-Programmierer in einer kleinen Firma

  • Private Nachricht senden

2

28.05.2004, 21:21

also:

if(variable) wäre doch das gleich wie: if(variable==true),
eigentlich müsste variable und null doch kommutativ sein => da variable = null ist, ist egal ob man schreibt null (von der variable) == null (angegebene konstante) oder null (als konstante) == null (variable). Du vergleichst ja die Werte und wenn beide null sind, dann steht da egal wie null == null.

Oder irr ich mich ???

Die anderen Fragen kann jmd anderes beantworten (bzw. diese noch was deutlicher erklären ;), meine Erklärung is wohl ein bissle umständlich)
"Tu es. Oder tu es nicht. Es gibt kein Versuchen."
StarWars

www.tron2d.de.vu

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

28.05.2004, 22:41

Zur sache mit den DLLs:
Es ist ein Unterschied ob du DLLs dynamisch lädst oder statisch. Sogar ein gewaltiger. Statische DLLs kann man für PlugIn Systeme knicken.

Ansonsten ist es total Schnuppe wie der code aussieht, doch man sollte sich an die Privilegien und Regeln der Programmiersprache halten wie z.B: bei C++ an das OCP.

Anonymous

unregistriert

4

28.05.2004, 23:31

statisches laden von DLLs wüsst ich garnich wie das geht, also kann ichs auch nicht machen ;D

ich lad die DLL´s dynamisch und zwar implizit (is bequemer).

aber laut visual c++ msdn (index-> Dynamisches Binden beim Laden) muss ich diesen LoadLibrary() und die anderen dll-hilfsfunktionen nur bei explizit machen.

also können diese zeilen weg die ich da fälschlicherweise lang drin hatte und wohl nie beachtet wurden?

5

29.05.2004, 03:22

@DLL:
Du lädst eine DLL Statisch wenn du sie mit dem Projekt verknüpfst. Das geht in den Settings deines Projektes. Dort wo du z.B. auch die d3d9.lib hinschreibst.

Wie Patrick schon sagte, kann man diese vorgehensweise bei z.B. PlugIn's vergessen. Statisch kannst du eine DLL immer dann laden wenn absolut feststeht das diese DLL immer gebraucht wird. Wenn dies nicht der Fall ist sollte eine DLL dynamisch geladen werden

@if-Anweisung:
die Ausdrücke if(var == NULL) und if(NULL == var) sind gleich. Aber if(var) ist genau das gegenteil zu anderen beiden Ausdrücken. Warum ist ganz klar, wenn man weis wie eine IF-Anweisung in C/C++ funktioniert.
Der Ausdruck inerhalb den () muss wahr sein damit die Bedingung erfült ist und der Code in den {} ausgeführt wird. Der Ausdruck ist dann wahr wenn der Ausdruck != 0 ist. Ist er == 0 ist er nicht wahr.

var == NULL oder NULL == var ist dann wahr wenn der Wert von var NULL ist. Beim dritten beispiel if(var) ist der Ausdruck wahr wenn der Wert von var != NULL ist.

Zitat

irgendwo im code am anfang einer funktion wenn das device benötigt wird:
"Local_lpDirect3DDevice = global_lpDirect3DDevice"
KA was das bewirken soll. Ist wohl nur dumheit weil der nicht so recht weis wie das mit den Namensräumen ausschaut, oder so. KA. Jedenfalls ist diese Zeil, so wie sie hier jetzt steht und beschrieben wird, total Sinnlos und kostet wertvolle Zeit.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

29.05.2004, 10:14

Zitat von »"unsigned int"«

if(variable) wäre doch das gleich wie: if(variable==true)

Nein! Beispiel:

if(5) Test();

Jetzt wird Test(); ausgeführt.
Aber 5 ist nicht gleich true, weil true meist als 1 definiert ist.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

29.05.2004, 12:47

if( var ) is schneller als if( var == true ), weil bei der 2. variante noch der ausdruck var == true ausgewertet werden muss.
die if anweisung wird in c++ immer ausgeführt, wenn der ausdruck zwischen den klammern != 0 is.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

8

29.05.2004, 13:33

Zitat von »"dot"«

if( var ) is schneller als if( var == true ), weil bei der 2. variante noch der ausdruck var == true ausgewertet werden muss.
die if anweisung wird in c++ immer ausgeführt, wenn der ausdruck zwischen den klammern != 0 is.



Äh Einspruch euer Ehren! if (var) ist nicht schneller als if (var == true)

es ist äquivalent wenn der Compiler optimierung an hat und dies hat er in der Regel bei Release versionen immer.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

29.05.2004, 14:19

ja wenn, dann natürlich schon

mit 0 == var und var == 0 gibts auch noch was.
ich glaub mal wo gehört/gelesen zu haben, dass 0 == var besser sein soll, kanns aber irgendwie nicht ganz glauben...

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

10

29.05.2004, 14:56

Insbesondere Leute, die von gerade anderen Sprachen kommen, vergessen oft das zweite "=".

Wenn man " 0 = var" statt " 0 == var" schreibt, gibt der Compiler einen Fehler.

Wenn man "var = 0" schreibt statt "var == 0", so wird die Variable auf 0 gesetzt, was dann zu u.U. sehr schwer nachvollziehbaren Fehlern zur Laufzeit führt.
"Games are algorithmic entertainment."

Werbeanzeige