Autor |
Beitrag |
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: So 07.11.10 20:06
Hi, ich bin seit nen paar Tagen in meinem Programm am Fehler suchen, habe aber nie was gefunden.
Arbeite teilweise mit GoTo(unvermeidbar imo) und brauchte deswegen ne unerfüllbare Bedingung.
Deshalb habe ich if 1+1=1 then genommen.
Alles schön und gut, Compiler hat kein Problem, also noch am Programm viele andere Änderungen gemacht.
Wie gesagt, ab dann kamen im Betrieb Fehler, ich suche wie ein Idiot, bis ich die Zeile änder.
Nun klappt es.
Lag es daran? Wieso hat der Compiler nichts von sich gegeben? Sollte man sowas generell vermeiden?
Lg
Henry
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 07.11.10 20:20
Ich habe den Sinn nicht verstanden und auch wenn im Maschinencode letztlich wieder goto (jmp) vorkommt gehört diese Relikt nicht mehr in wartbaren/lesbaren Code.
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: So 07.11.10 20:30
Es geht hier wirklich nicht ohne GoTo, zumindest wüsste ich nicht wie, hatte das Thema hier schonmal angesprochen.
Der Sinn war, dass mich interessiert, ob man sowas benutzen kann (if 1+1=1) und ob der Compiler solche Sachen übersetzt, obwohl der Computer es nicht "versteht".
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: So 07.11.10 20:32
Es geht ohne Goto, ganz sicher!
Und was die nicht erfüllbare Klausel angeht, wie wäre es mit: If(false)then... (und was soll der Computer daran nicht verstehen?!?)
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: So 07.11.10 20:42
Mal eine kleine Frage:
if 1+1=1 then ....
ist doch eigentlich unsinnig, oder, denn der Code hinter if wird doch nie ausgeführt, denn 1+1 ist eben nicht 1, also false. Also gilt übersetzt
if false then ....
das macht dann Sinn und zeigt, dass der Code nach if eben nie ausgeführt wird. Also kann er gleich gelöscht werden!
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: So 07.11.10 20:51
Ja und? Warum sollte "der Computer das nicht verstehen"? Du hast da eine Bedingung hingeschrieben, die nicht erfüllt ist, also wird das, was hinter dem 'then' steht auch nie ausgeführt. Wenn die Optimierung des Compilers eingeschaltet ist, so wird er diesen Fall 'wegoptimieren'. Was aber hat das mit Goto zu tun?!?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: So 07.11.10 21:04
Ok, hat sich geklärt denke.
Mein Problem war, dass der Compiler bei if 2*1=1 then nen internen Fehler angezeigt hat. Aber nicht bei if 1+1=1.
Deswegen dachte ich, dass es klappen würde, was aber nicht so war.
Tranx hat meine Frage praktisch geklärt, sorry wenn ich mich schlecht ausgedrückt hatte.
Lg
henry
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: So 07.11.10 21:40
Für diesen Beitrag haben gedankt: der organist, F34r0fTh3D4rk, Teekeks
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 08.11.10 07:15
@FinnO: Syntax ist zwar falsch, aber damit hier keiner auf die Idee kommt, schreib ich die Korrektur hier auch nicht.
Aber deine Vermutung teile ich und Tranx hat auch schon schön den Grund erklärt, warum es da kracht. Warum aber der Compiler bei 2*1=1 nen internen Fehler, und bei 1+1=1 nix (nicht mal die übliche Short Circuit Warnung) bringt, wundert mich etwas.
Wie das aber immer so mit ohne Source ist: Man kann viel rätseln.
BTW1: Je Goto = einmal in flüssigem Metal baden gehen. Die Anzahl der Label bestimmt die Anzahl Nullen in der Temperatur
BTW2: Ich hab schon aus der typischen ZLib-Schleife Gotos entfernt oder andere Verquere Strukturen so umgebaut, dass sie ohne Goto gingen. Man muss nur wollen ... Und dadurch ist bisher ALLES übersichtlicher geworden. Die einzigen erlaubten Sprünge sind mit Break, Continue, Exit oder Raise. Alles andere fällt unter BTW1.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Mo 08.11.10 14:00
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mo 08.11.10 14:09
Insgesamt gesehen : was Du da zusammenbraust ist entsetzlich.  Da muss es irgendwo krachen. 
_________________ Gruß
Hansa
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Mo 08.11.10 18:58
Das mit dem Dino finde ich echt zum Schreien!!
Goto Dino!!!
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|