Charlie Carothers wrote:
I'm afraid I must disagree. What if, for my own nefarious purposes, I
need the N microseconds of delay achieved via the "spurious" for loop?
I know, code loop delays are generally a poor practice, but what does
one do if a delay is absolutely required before timer interrupts can
be enabled? What if there is no hardware timer (e.g. 8254) that can
be read periodically to time the delay? What if I am writing a quick
hardware test?
Disagree all you want, but the C language offers no guarantees about how
long a loop (or anything else) takes to execute, so a compiler
optimizing away an empty loop is perfectly valid. You can try compiling
with optimizations off, but there's not really any guarantee with that
either. If I had to have a delay of a known length, and had no timer
available, I'd call an assembly language subroutine.
You could try a more complicated loop in C:
int i, j;
j = 0;
for (i = 1; i <= 100; i++)
j += i;
But a really clever compiler could still replace all of this with:
int i, j;
i = 101;
j = 5050;
Eric