Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi C For Schleife nach Delphi (https://www.delphipraxis.net/58863-c-schleife-nach-delphi.html)

stoxx 13. Dez 2005 21:32


C For Schleife nach Delphi
 
ich bin gerade dabei, einen C Quelltext nach Delphi zu portieren, und bin auf sowas gestoßen !
was tut das teil ?

Delphi-Quellcode:
 for(*edge_pos=1, *chars_found=1; *edge_pos<length; (*chars_found)++,(*edge_pos)++)
      {
      }

dann habe ich noch einen Teil:

*chars_found = 0;
und
(*chars_found) = length;


vermute ich da richtig, dass die Klammern in dem Fall überflüssig sind, oder wird da komplett was anderes getan ?

Wäre schön, wenn mir jemand helfen könnte !
Danke !

leddl 13. Dez 2005 21:35

Re: C For Schleife nach Delphi
 
Zitat:

Zitat von stoxx
Code:
 for(*edge_pos=1, *chars_found=1; *edge_pos<length; (*chars_found)++,(*edge_pos)++)
      {
      }

Ich kenn mich mit C nich aus, die Schleife sieht aber nicht so schwer zu verstehen aus.
Für die For-Schleife werden zwei Variablen (edge_pos, chars_found) mti 1 initialisiert. Dann läuft die Schleife, solange edge_pos kleiner als length ist und die beiden Variablen werden pro Durchgang um 1 erhöht.

//Edit:
Sorry, hab da wohl was übersehen: Es werden keine Variablen initialisiert, sondern Zeiger. (Das deutet der * ja an.)
Zu deiner zweiten Frage kann ich eigentlich nur mutmaßen, da ich mich wie gesagt überhaupt nicht auskenne, aber ich denke mal, daß die Klammer wahrscheinlich wirklich unnötg ist.

tommie-lie 13. Dez 2005 22:00

Re: C For Schleife nach Delphi
 
Zitat:

Zitat von leddl
Sorry, hab da wohl was übersehen: Es werden keine Variablen initialisiert, sondern Zeiger. (Das deutet der * ja an.)

Zeiger sind doch auch Variablen ;-)
Die Zeiger scheinen lediglich ein Workaround für By-Reference-Übergaben zu sein.
for-Schleifen in C sind mächtiger als in Delphi, man kann sie nicht immer in Delphi in einer for-Schleife abbilden.
In diesem Fall ist eine while-Schleife mit vorheriger Initialisierung nötig:
Delphi-Quellcode:
edge_pos^ = 1;
chars_found^ = 1;

while (edge_pos^ < length) do
begin
  chars_found^ := chars_found^ + 1;
  edge_pos^ := edge_pos^ + 1;
end;
edge_pos und chars_found sind wahrscheinlich Pointer auf Integer (int *).

leddl 13. Dez 2005 22:03

Re: C For Schleife nach Delphi
 
Zitat:

Zitat von tommie-lie
Zeiger sind doch auch Variablen ;-)

Aber spezielle, daher wollte ich das nochmal gesagt haben ;)

stoxx 13. Dez 2005 22:07

Re: C For Schleife nach Delphi
 
okay .. vielen Dank !
das ist mein erster C Quelltext, denn ich nach Delphi portiere, also man möge mir nachsehen :-)

Ich hab nur immer etwas Angst, dass man mit einem C Ausdruck mehr anstellt, als man eigentlich vorhatte ....

Zitat:

edge_pos und chars_found sind wahrscheinlich Pointer auf Integer (int *).

ja, da ist richtig, in meinem Fall aber uninteressant, da das nur Funktionsübergaben by Reference sind ..

tommie-lie 14. Dez 2005 14:07

Re: C For Schleife nach Delphi
 
Zitat:

Zitat von stoxx
ja, da ist richtig, in meinem Fall aber uninteressant, da das nur Funktionsübergaben by Reference sind ..

Jupp, wenn du's in Delphi aber nicht über Pointer machst (sondern mit Parametern by Reference) musst du latürnich die Dereferenzierungsoperatoren aus meinem Quellcode rausnehmen ;-)

sniper_w 14. Dez 2005 14:17

Re: C For Schleife nach Delphi
 
Zitat:

for-Schleifen in C sind mächtiger als in Delphi
:shock: In welchem Kontext ?

tommie-lie 14. Dez 2005 14:49

Re: C For Schleife nach Delphi
 
Zitat:

Zitat von sniper_w
Zitat:

for-Schleifen in C sind mächtiger als in Delphi
:shock: In welchem Kontext ?

Beispielsweise in diesem. Man kann in C mit einer for-Schleife mehr anfangen als in Delphi. Zum Beispiel eine Abbruchbedingung auf mehr als eine Variable, beliebige Befehle bei jedem Schleifendurchlauf. In Delphi bist du auf eine Zählvariable beschränkt, die auch nicht mehr macht, als der Name verspricht: Sie wird hoch- oder runtergezählt.

sniper_w 14. Dez 2005 14:54

Re: C For Schleife nach Delphi
 
Wenn du mit "mächtiger"meinst, dass es leichter sei, etwas zu beschreiben, dann ja. Sonst ist es ganz egal, und IMHO ( bin nicht sicher ) sind Delphi schleifen schneller, denn loop variable ist in einem Register gelegt, was nicht der Fall in C ist.

tommie-lie 14. Dez 2005 15:02

Re: C For Schleife nach Delphi
 
Zitat:

Zitat von sniper_w
Wenn du mit "mächtiger"meinst, dass es leichter sei, etwas zu beschreiben, dann ja.

Ich meine, was ich sage. Mit mächtiger ist gemeint, daß eine for-Schleife in C mehr kann als eine for-Schleife in Delphi. Nicht mehr und nicht weniger. Daß es scheißegal ist, weil ich die Funktionalität einer for-Schleife in C *immer* mit einer while-Schleife in Delphi nachbauen kann, wenn man es mit einer for-Schleife nicht hinkriegt, ist eine andere Sache. Hier wäre auch eine for-Schleife in Delphi möglich gewesen, IMHO ist aber eine while-Schleife in diesem Fall sinnvoller.

Zitat:

Zitat von sniper_w
Sonst ist es ganz egal, und IMHO ( bin nicht sicher ) sind Delphi schleifen schneller, denn loop variable ist in einem Register gelegt, was nicht der Fall in C ist.

Ein vernünftiger C-Compiler mit aktivierter Optimierung wird bei for (int i = 0; i < 10; i++) die Variable i sicherlich auch in ein Register stecken, wenn er die Register nicht anderweitig benötigt. Da eine for-Schleife in C vollkommen andere Möglichkeiten bietet, wirst du aber sicherlich auch ein Beispiel finden, wo keine einzige Variable in ein Register wandert. for (; somefunction(); ) wäre ein solches Beispiel, hier gips nix, was in ein Register könnte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr.
Seite 1 von 2  1 2      

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