|
for loop's |
Top Previous Next |
|
What is translated > Statements > for loop's Delphi supports two kinds of 'for' loops:
In a counter-based Delphi loop, the initial and final expressions are evaluated exactly once, before the loop starts. In C++, however, the loop condition is evaluated before every iteration. This difference requires special handling during translation.
In the following example, the original value of 'n' determines the number of iterations:
procedure Test; var I, n: Integer; begin n := 10; for I := 1 to n do begin DoSomething; n := 11; end; end;
A straightforward translation would be:
int I = 0; int n = 0;
n = 10; for (I = 1; I <= n; ++I) { DoSomething(); n = 11; }
This translation does not preserve the Delphi behavior. In C++, the condition 'I <= n' is evaluated before every iteration. Because 'n' is changed to '11' inside the loop, C++ executes an additional iteration.
To preserve the Delphi semantics, the original final value must be stored before the loop starts:
int I = 0; int n = 0;
n = 10; const int stop = n;
for (I = 1; I <= stop; ++I) { DoSomething(); n = 11; }
Delphi2Cpp can generate either form, depending on the Use "stop" variable in for-loop** option.
Delphi2Cpp also checks whether the type of the loop variable can safely represent the value required to terminate the generated C++ loop. If necessary, it replaces the loop variable with a wider type. See Loop Variable Type for details.
|
|
This page belongs to the Delphi2Cpp Documentation |
Delphi2Cpp home Content |