Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 07.11.10 21:40 
user profile iconplatzwart hat folgendes geschrieben Zum zitierten Posting springen:
Was aber hat das mit Goto zu tun?!?


Ich hab da ne ganz üble befürchtung:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if (false) then
begin
  label Sprungmarke: 
  {dosth}
end
else
  {dosthelse}
  goto Sprungmarke;
end;


(keine gewähr für richtigen goto-code, hab das nie gemacht...

Für diesen Beitrag haben gedankt: der organist, F34r0fTh3D4rk, Teekeks
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mo 08.11.10 14:00 
user defined image

:mrgreen:
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mo 08.11.10 14:09 
Insgesamt gesehen : was Du da zusammenbraust ist entsetzlich. :mrgreen: Da muss es irgendwo krachen. :lol:

_________________
Gruß
Hansa
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Mo 08.11.10 18:58 
Das mit dem Dino finde ich echt zum Schreien!! :lol:

Goto Dino!!!

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.