AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Übersetzungs"schwierigkeiten" ( c/c++ -> delphi )
Thema durchsuchen
Ansicht
Themen-Optionen

Übersetzungs"schwierigkeiten" ( c/c++ -> delphi )

Ein Thema von HeikoDD · begonnen am 23. Mai 2007 · letzter Beitrag vom 23. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
HeikoDD

Registriert seit: 8. Okt 2003
11 Beiträge
 
#1

Übersetzungs"schwierigkeiten" ( c/c++ -> delphi

  Alt 23. Mai 2007, 08:55
Hallo, nah ist mir aber jetzt peinlich zu fragen.

Weiß zu fällig jemand ob mein Ansatz recht so ist:

original:

for (k = 0; k < x; ++k) {
tu doch was;
}

meine bisherige Lösung:

k := 0;
while (k < x) do begin
inc(k);
tu doch was;
end;

Was mich daran verwirrt ist der der dritte Teil in dem Kopf der C-Schleife. Der Counter soll vor dem Durchlauf hochgezählt werden?

Danke schon mal im voraus.

Heiko
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Übersetzungs"schwierigkeiten" ( c/c++ -> de

  Alt 23. Mai 2007, 09:06
Also sollte das wirklich der Fall sein, dass ein ++k im Schleifenkopf tatsächlich das k auch vor dem Durchlauf inkrementiert, dann kannst du das doch ganz einfach darstellen, indem du k gleich bei 1 starten lässt
Delphi-Quellcode:
for k := 1 To x-1 Do
Begin
  //Hier passiert was
End

bzw.

k := 1;
while k < x Do
Begin
  //wuppdi
  inc(k);
End;
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Übersetzungs"schwierigkeiten" ( c/c++ -> de

  Alt 23. Mai 2007, 09:07
Zitat von HeikoDD:
Der Counter soll vor dem Durchlauf hochgezählt werden?
Imho ja ... und deswegen muss deine Schleife bei 1 anfangen zu zählen.

//edit: recht hat der Axel

//edit2: scheinbar ist das alles Quatsch ... sieh unten
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

Re: Übersetzungs"schwierigkeiten" ( c/c++ -> de

  Alt 23. Mai 2007, 11:17
Der Counter wird nicht vor dem Durchlauf hochgezählt. Die Anweisung ++k wird am Ende des Schleifendurchlaufs durchgeführt.

Code:
for (k = 0; k < x; ++k) {

}
wird genau wie
Code:
for (k = 0; k < x; k++) {

}
zu
Delphi-Quellcode:
for i := 0 to x - 1 do begin

end
.

k wird in beiden Fällen nach jedem Schleifendurchlauf inkrementiert. Der Unterschied liegt lediglich im Wert der Ausdrücke k++ bzw. ++k, der erste hat den Wert von k vor der Inkrementierung, der zweite hat den Wert von k nach der Inkrementierung.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Übersetzungs"schwierigkeiten" ( c/c++ -> de

  Alt 23. Mai 2007, 11:25
Zitat von OregonGhost:
Der Counter wird nicht vor dem Durchlauf hochgezählt. Die Anweisung ++k wird am Ende des Schleifendurchlaufs durchgeführt.
Das war mein erster Gedanke, aber da ich nichts zum Testen da habe, bin ich einfach mal davon ausgegangen, dass HeikoDD das schon getestet hat Wenn du jetzt aber mit Sicherheit sagen kannst, dass das so nicht stimmt, dann fühle ich mich insgeheim bestätigt und ziehe meine Antwort von vorhin zurück

//Edit:
Wobei ich meine Antwort ja sogar ausdrücklich nur für den Fall gegeben habe, dass ++k vor dem Schleifendurchlauf inkrementiert. Insofern brauche ich die ja nich mal zurückziehen
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

Re: Übersetzungs"schwierigkeiten" ( c/c++ -> de

  Alt 23. Mai 2007, 11:42
Ich kann es mit Sicherheit sagen, denn da ihr drei mich verunsichert habt, hab ich einfach mal testweise beide Schleifen kompiliert und bin zu identischen Ergebnissen gekommen, wie erwartet
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Übersetzungs"schwierigkeiten" ( c/c++ -> de

  Alt 23. Mai 2007, 11:53
Ich hatte das selbe Thema auch schonmal hier angesprochen. Ich kenne es von anderen C Systemen aus früheren Zeiten noch, dort konnte man per Schreibweise (also ++k bzw. k++) festlegen, ob vor oder nach dem Durchlauf inkrementiert werden sollte. Dies wurde dann später mit dem festlegen im C99 (?) Standard (immer nach dem Durchlauf) eindeutig. Ich kenne wie gesagt auch einen Unterschied zwischen den Schreibweisen...
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Übersetzungs"schwierigkeiten" ( c/c++ -> de

  Alt 23. Mai 2007, 12:01
Muetze1, das klingt aber sehr nach Unsinn.
Die for-Schleife ist von Beginn an als while-Schleife definiert worden.
Code:
for (expression1; expression2; expression3)
  DoSomething;
und
Code:
expression1;
while (expression2)
 {
  DoSomething;
  expression3;
 }
sind vollstaendig gleich!

Der Unterschied von k++ und ++k liegt im Wert des Ausdrucks. Beide male wird die Variable inkrementiert, aber k++ liefert den Wert vor der Inkrementierung und ++k nach der Inkrementierung.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#9

Re: Übersetzungs"schwierigkeiten" ( c/c++ -> de

  Alt 23. Mai 2007, 12:07
Der Unterschied liegt in C in der Tat nur im Wert des Ausdrucks. In C++ liegt er auch im auszuführenden Code. Wenn eine Klasse den Postfix-Operator überladen hat, muss der Compiler ihn ausführen, selbst wenn er für fundamentale Typen intelligent genug wäre, ihn in einen Präfix-Aufruf umzuwandeln. Das führt typischerweise auch zu einer Kopie des Objekts und somit zu Performance-Einbrüchen und im schlimmsten Fall zu Seiteneffekten (ist ja nicht vorgeschrieben, was man in so einem Operator überhaupt macht). Das braucht jemanden, der eine For-Schleife von C/C++ nach Delphi konvertieren will, im Normalfall aber nicht zu kümmern, bzw. nur, wenn der C++-Programmierer ein Sadist und/oder Masochist ist.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: Übersetzungs"schwierigkeiten" ( c/c++ -> de

  Alt 23. Mai 2007, 12:13
Das ist der Grund warum ich das Ueberladen von Operatoren hasse. Man kann nicht mehr ohne einen moeglicherweise riesigen Kontext erkennen was in einer Source passiert. Schlimmstenfalls hat man den Kontext (die Implementierung der Ueberladung) nicht einmal vorliegen. Das wird jetzt allerdings OT.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz