Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by EternallyCurious. 04/18/24 10:45
StartWeek not working as it should
by Zheka. 04/18/24 10:11
folder management functions
by VoroneTZ. 04/17/24 06:52
lookback setting performance issue
by 7th_zorro. 04/16/24 03:08
zorro 64bit command line support
by 7th_zorro. 04/15/24 09:36
Zorro FIX plugin - Experimental
by flink. 04/14/24 07:48
Zorro FIX plugin - Experimental
by flink. 04/14/24 07:46
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
4 registered members (7th_zorro, Quad, VoroneTZ, 1 invisible), 623 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
EternallyCurious, 11honza11, ccorrea, sakolin, rajesh7827
19046 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 183 of 349 1 2 181 182 183 184 185 348 349
Re: Der "mich kotzt etwas verdammt an"- Thread [Re: Uhrwerk] #404397
07/08/12 15:02
07/08/12 15:02
Joined: Jan 2003
Posts: 4,305
Damocles Offline
Expert
Damocles  Offline
Expert

Joined: Jan 2003
Posts: 4,305
Bestes Beipiel für die Gefahr hinter if (a = b) ...

Eine der versuchten Community Änderungen am Linux Kernel:

Code:
if ((options == (__WCLONE|__WALL)) && (current->uid = 0))   retval = -EINVAL;
        retval = -ECHILD;
 ....



Sieht erstmal nicht besonders gefährlich aus.
Allerdings setzt beim ausführen dieser Condition der Kernel
den User auf 0 (root! = alle Rechte)
Ist sehr leicht zu übersehen, vor allem ohne Code Warning in der IDE.

http://kerneltrap.org/node/1584

Re: Der "mich kotzt etwas verdammt an"- Thread [Re: Damocles] #404404
07/08/12 16:36
07/08/12 16:36
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Naja, der Ausdruck ist ja eh sehr kryptisch, mir ist z.B. nicht ersichtlich, was die Konstanten __WCLONE und __WALL bedeuten, oder was -ECHILD dann letztenendes meint. Bei komplizierten Ausdrücken lohnt es sich dann, finde ich, Teile vorher auszuwerten und dann in den Ausdruck einzusetzen:

Code:
boolean faceIsPartOfModel = ...;
boolean faceHasUv = ...;

if (faceIsPartOfModel && faceHasUv)
{
   // do something
}



Aber richtig, das mit dem = ist gefährlich. Richtig ätzend ist es dann, wenn so tolle selbsternannte Programmierergötter das absichtlich so machen, um die Zuweisung zu machen, eine Zeile zu sparen und den als 1 evaluierten Ausdruck weiterzuverwursten. Oder Spielchen mit ++ oder -- hinter oder vor einer Variable in nem langen Ausdruck - geht gar nicht! Nicht weil man selber zu blöd ist, das nachzuvollziehen, sondern weil das wieder die Übersicht und die Wartbarkeit negativ beeinflusst.

Wenn ich mich richtig erinnere, wird in Pascal das ":=" verwendet, um eine Zuweisung auszudrücken, während "=" die Äquivalenz prüft. Finde ich so besser, da es den mathematischen Hintergründen gerecht wird.

Last edited by HeelX; 07/08/12 16:37.
Re: Der "mich kotzt etwas verdammt an"- Thread [Re: Uhrwerk] #404411
07/08/12 17:57
07/08/12 17:57
Joined: Dec 2002
Posts: 3,363
Vindobona (Ostarichi)
Harry Potter Offline
Expert
Harry Potter  Offline
Expert

Joined: Dec 2002
Posts: 3,363
Vindobona (Ostarichi)
Originally Posted By: Uhrwerk
Harry, das würde man ja auch so schreiben:
Code:
void blabla()
{
  if(a == b)
    while(1)
    {
      Tu_das(1);
      Tu_das(2);
      if(c == d)
        Tu_das(3);
    }
}


Oh mein Gott, das finde ich ja total pervers. grin
Und vor allem extrem anfällig für Programmfehler, weil man leicht übersehen könnte, dass beim "IF" die Klammer fehlt, und man dann glauben könnte, dass noch nachfolgende Programmzeilen ebenfalls zum IF-Block dazu gehören. Beim Beispiel oben könnte jemand nach der Zeile "Tu_das(3);" noch eine Zeile "Tu_das(4)" einfügen, in dem Glauben, dass das dann auch noch zur IF-Bedingung dazu gehört. Weil eine Zeile tiefer steht ja eine geschwungene Klammer "}", und man könnte glauben, dass diese das Ende vom IF-Block ist. Und schon hat man einen Programmfehler, der sich nur schwer finden lässt.

Bevor ich das hier schreibe:
Code:
if(c == d)
  Tu_das(3);

schreibe ich lieber das hier:
Code:
if(c == d) {Tu_das(3);}



Re: Der "mich kotzt etwas verdammt an"- Thread [Re: Harry Potter] #404414
07/08/12 18:11
07/08/12 18:11
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
In dieselbe Zeile? Brrr. Aber wenigstens machst du kein Leerzeichen nach und vor { & } wink

Re: Der "mich kotzt etwas verdammt an"- Thread [Re: HeelX] #404415
07/08/12 19:44
07/08/12 19:44
Joined: Dec 2002
Posts: 3,363
Vindobona (Ostarichi)
Harry Potter Offline
Expert
Harry Potter  Offline
Expert

Joined: Dec 2002
Posts: 3,363
Vindobona (Ostarichi)
Ja, wenn eine Bedingung nur eine einzige Zeile betrifft, dann schreibe ich das auch gerne in eine einzige Zeile. Weil das ja dann auch irgendwie sinngemäß zusammengehört. Und das sieht man dann auch sofort auf einem Blick, und es reduziert die Länge des Codings.

Natürlich mache ich das nur dann, wenn die Zeile dadurch nicht insgesamt zu lang und unleserlich wird.
Typisches Beispiel:
Code:
while(1)
{
  do_exit = check_exit_loop(gv_parm1, gv_parm2, gv_parm3);
  if(do_exit) {break;}             //<---Kurz und bündig

//Und hier geht es weiter ...
  if ((gv_parm1 == 1) !! (gv_parm2 == 99))
  {
    Tu_das(1);
    Tu_das(2);
    Tu_das(3);
  }
}



Last edited by Harry Potter; 07/08/12 20:04.
Re: Der "mich kotzt etwas verdammt an"- Thread [Re: Harry Potter] #404416
07/08/12 20:31
07/08/12 20:31
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Was ist denn !! ??

Re: Der "mich kotzt etwas verdammt an"- Thread [Re: HeelX] #404417
07/08/12 20:34
07/08/12 20:34
Joined: Feb 2009
Posts: 3,207
Germany, Magdeburg
Rei_Ayanami Offline
Expert
Rei_Ayanami  Offline
Expert

Joined: Feb 2009
Posts: 3,207
Germany, Magdeburg
Warum überhaupt {} da..?

Re: Der "mich kotzt etwas verdammt an"- Thread [Re: Harry Potter] #404421
07/08/12 21:21
07/08/12 21:21
Joined: Jan 2002
Posts: 4,225
Germany / Essen
Uhrwerk Offline
Expert
Uhrwerk  Offline
Expert

Joined: Jan 2002
Posts: 4,225
Germany / Essen
Originally Posted By: Harry Potter
Oh mein Gott, das finde ich ja total pervers. grin Und vor allem extrem anfällig für Programmfehler, weil man leicht übersehen könnte, dass beim "IF" die Klammer fehlt, und man dann glauben könnte, dass noch nachfolgende Programmzeilen ebenfalls zum IF-Block dazu gehören

Den Trugschluss kann man nur ziehen wenn man die Einrückung ignoriert und noch eine öffnende Klammer hinzuphantasiert. Mann könnte auch schreiben:
Code:
void blabla()
{
  if(a == b)
  {
    while(1)
    {
      Tu_das(1);
      Tu_das(2);
      if(c == d)
        Tu_das(3);
    }
  }
}

Das macht es noch einen Tick deutlicher. Auf due Klammer um "Tu_das(3); sollte man aber auf jeden Fall verzichten.


Always learn from history, to be sure you make the same mistakes again...
Re: Der "mich kotzt etwas verdammt an"- Thread [Re: HeelX] #404426
07/09/12 00:07
07/09/12 00:07
Joined: Dec 2002
Posts: 3,363
Vindobona (Ostarichi)
Harry Potter Offline
Expert
Harry Potter  Offline
Expert

Joined: Dec 2002
Posts: 3,363
Vindobona (Ostarichi)
Originally Posted By: HeelX
Was ist denn !! ??
Tippfehler. Sollte natürlich || heißen.

Re: Der "mich kotzt etwas verdammt an"- Thread [Re: Harry Potter] #404428
07/09/12 04:27
07/09/12 04:27
Joined: Jan 2003
Posts: 4,305
Damocles Offline
Expert
Damocles  Offline
Expert

Joined: Jan 2003
Posts: 4,305
Kennt das hier jemand in Java?

Code:
void blabla()
{
  if((checkA()==2) & (checkB()==3))
  {
     tuDas();
  }
}



Ist realtiv unbekannt, funktioniert aber.

Jetzt ratet mal den Unterschied zwischen

if((checkA()==2) && (checkB()==3))
und
if((checkA()==2) & (checkB()==3))

Den gibt es, und das kann schnell zu gemeinen Bugs führen wenn man
das Konstrukt nicht kennt.

Page 183 of 349 1 2 181 182 183 184 185 348 349

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1