From: | Bart <bc@freeuk.com> |
Newsgroups: | comp.compilers |
Date: | Wed, 8 May 2019 14:37:31 +0100 |
Organization: | virginmedia.com |
References: | 19-04-021 19-04-023 19-04-037 19-04-039 19-04-042 19-04-044 19-04-047 19-05-004 19-05-006 19-05-016 19-05-020 19-05-024 19-05-025 19-05-028 19-05-029 19-05-034 19-05-045 |
Injection-Info: | gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="57482"; mail-complaints-to="abuse@iecc.com" |
Keywords: | C, design |
Posted-Date: | 08 May 2019 12:46:45 EDT |
Content-Language: | en-GB |
On 07/05/2019 10:04, David Brown wrote:
> On 06/05/2019 10:15, Hans-Peter Diettrich wrote:
>> I learned to love the Pascal indexing instead of pointers, because a
>> loop like
>> for i := 1 to 10 do sum := sum + A[i];
>> can be optimized safely by the Pascal/Delphi compiler into pointer and
>> auto increment, so that no speed penalty exists vs. explicit pointer
>> usage. But in a C for loop the index variable can be changed in code, so
>> that even above code would execute slower with bounds checks.
>>
>
> It will not be slower in C - because the compiler knows that "i" is
> never changed in the loop. (I'd like some way to have that enforced in
> C, but I don't know of any good method.)
Making loop variables declared in a for-header be implicitly 'const'
could be done:
for (int i=0; i<N; ++i)
This can be the same as 'const i=0'.
The problem is that in such a loop (of the kind I frequently malign in
c.l.c and you always disagree), the code to increment this loop variable
is in user-code. So it is subject to the same rules as all other code,
and i cannot be changed.
In a more typical for-loop, such increments are done behind the scenes,
while still keeping the loop index read-only in user-code.
Return to the
comp.compilers page.
Search the
comp.compilers archives again.