From: Mary-Ann J. <Mar...@di...> - 2008-01-24 11:30:34
|
Yes, I want the compiler to optimise it away, but I'd like it to do so without complaining about the "timeout" variable. The following code has similar problems: void func(void) { return; { int timeout; timeout =3D 0xFFFF; while (timeout--); } } Mary-Ann Ken Jackson wrote: > I don't know the answer, though I offer an observation. >=20 > Most compilers will optimize away the delay that you are > trying to implement. Therefore you should declare timeout this way: >=20 > volatile int timeout; >=20 > Also, when I do it that way, I don't get the warning. >=20 > -Ken Jackson >=20 > Mary-Ann Johnson writes: > > If I compile the following code (SDCC 2.7.0): > > > > ------------------------------------------------ =20 > > void func(void) > > { > > int timeout; > > > > return; > > > > timeout =3D 0xFFFF; > > while (timeout--); > > } > > ------------------------------------------------ > > > > SDCC produces the following warnings: > > "src/test.c:8: warning 84: 'auto' variable 'timeout' may > > be used before initialization =20 > > src/test.c:8: warning 84: 'auto' variable 'timeout' may be > > be used before initialization =20 > > src/test.c:8: warning 84: 'auto' variable 'timeout' may be > > used before initialization" > > > > Any idea why? > > > > And before someone says "Don't call 'return' there!" - > > this scenario happens when a macro is set to "return" to > > eliminate the 2nd half of a function. > > > > Thanks, > > Mary-Ann |