On Tue, Apr 20, 2010 at 06:54:33PM -0700, Bill Broadley wrote: > On 04/20/2010 06:37 PM, Brian Lavender wrote: > > Our new guy (forget his name, doh!) and I figured out the problem with > > my loop that would count down, but not terminate. Turns out I was using > > an unsigned integer for my counter in my for loop and it is always > > greater than zero (Example 1). > > No, it's not always greater than zero. Your test says i>=0 so if it's > greater than or equal to zero it continues. Seems like you want i>0.
Sorry, I meant to say it's always greater than or equal than zero. zero minus 1 is 4294967295 (0xffffffff) on a 32 bit machine. It can never go negative because it is unsigned and the loop will never terminate. Thus, I am thinking that the compiler could catch this due to the fact that i is unsigned. I wanted to print out the reverse of an array. If you run the following, the loop will never terminate. #include <stdio.h> int main() { int a[] = {5,6,8,3,4}; unsigned int i; for (i= (sizeof(a) -1)/sizeof(int) ; i >= 0; i--) { printf("%d\n",a[i]); } return 0; } > > > Funny thing is that -Wall didn't catch this. Seems that -Wall could > > catch this assuming that we want to loop to terminate. Any thoughts? > > Seems strange, but legal to do what you wanted. > > > Say the compiler gave a warning, would that mess up the "for (;;)" > > construct shown in Example 2? > > > > brian > > > > // Example 1 > > // Loop never terminates > > #include<stdio.h> > > > > int main() { > > unsigned int i, num=50; > > > > > > for (i= num ; i>= 0; i--) { > > printf("%u\n",i); > > } > > > > return 0; > > } > > > > // Example 2 > > // Purposely never terminates > > #include<stdio.h> > > > > int main() { > > for (;;) { > > printf("Hello forever\n"); > > } > > return 0; > > } -- Brian Lavender http://www.brie.com/brian/ "For every complex problem there is an answer that is clear, simple, and wrong." - H. L. Mencken _______________________________________________ vox-tech mailing list vox-tech@lists.lugod.org http://lists.lugod.org/mailman/listinfo/vox-tech