D - Should This Be Legal?
- Russ Lewis <spamhole-2001-07-16 deming-os.org> Nov 01 2002
- Burton Radons <loth users.sourceforge.net> Nov 01 2002
- Russ Lewis <spamhole-2001-07-16 deming-os.org> Nov 01 2002
- Burton Radons <loth users.sourceforge.net> Nov 01 2002
- "Mike Wynn" <mike.wynn l8night.co.uk> Nov 01 2002
I was doing a search through an array, and I wanted to assert that I
definitely would find what I was looking for in the array. So I coded
this, which crashed DLI 0.1.1:
for(int foo=0; assert(foo<array.length); foo++)
if(do_test(array[foo]))
do_stuff();
Is this be legal? If not, why not?
--
The Villagers are Online! http://villagersonline.com
.[ (the fox.(quick,brown)) jumped.over(the dog.lazy) ]
.[ (a version.of(English).(precise.more)) is(possible) ]
?[ you want.to(help(develop(it))) ]
Nov 01 2002
Russ Lewis wrote:I was doing a search through an array, and I wanted to assert that I definitely would find what I was looking for in the array. So I coded this, which crashed DLI 0.1.1: for(int foo=0; assert(foo<array.length); foo++) if(do_test(array[foo])) do_stuff(); Is this be legal? If not, why not?
assert isn't an expression, so no. This assertion is redundant anyway - in normal builds the array[foo] will do a bounds check, in release builds neither will be checked.
Nov 01 2002
Burton Radons wrote:Russ Lewis wrote:I was doing a search through an array, and I wanted to assert that I definitely would find what I was looking for in the array. So I coded this, which crashed DLI 0.1.1: for(int foo=0; assert(foo<array.length); foo++) if(do_test(array[foo])) do_stuff(); Is this be legal? If not, why not?
assert isn't an expression, so no. This assertion is redundant anyway - in normal builds the array[foo] will do a bounds check, in release builds neither will be checked.
ACK!!!! I forgot the key thing in the whole code! There was supposed to be a break if you match the test: for(int foo=0; assert(foo<array.length); foo++) if(do_test(array[foo])) { do_stuff(); break; } Does that make more sense now? -- The Villagers are Online! http://villagersonline.com .[ (the fox.(quick,brown)) jumped.over(the dog.lazy) ] .[ (a version.of(English).(precise.more)) is(possible) ] ?[ you want.to(help(develop(it))) ]
Nov 01 2002
Russ Lewis wrote:Burton Radons wrote:Russ Lewis wrote:I was doing a search through an array, and I wanted to assert that I definitely would find what I was looking for in the array. So I coded this, which crashed DLI 0.1.1: for(int foo=0; assert(foo<array.length); foo++) if(do_test(array[foo])) do_stuff(); Is this be legal? If not, why not?
assert isn't an expression, so no. This assertion is redundant anyway - in normal builds the array[foo] will do a bounds check, in release builds neither will be checked.
ACK!!!! I forgot the key thing in the whole code! There was supposed to be a break if you match the test: for(int foo=0; assert(foo<array.length); foo++) if(do_test(array[foo])) { do_stuff(); break; } Does that make more sense now?
I understood what you meant. It turns out assert is an expression - I assume to allow chaining with comma - but it's still incorrect here as it returns void. I throw an error on the occasion now. I don't think it's a common enough form to have it in the language.
Nov 01 2002
"Russ Lewis" <spamhole-2001-07-16 deming-os.org> wrote in message news:3DC2903C.660DA40C deming-os.org...I was doing a search through an array, and I wanted to assert that I definitely would find what I was looking for in the array. So I coded this, which crashed DLI 0.1.1: for(int foo=0; assert(foo<array.length); foo++) if(do_test(array[foo])) do_stuff(); Is this be legal? If not, why not?
apart from assert not being an expression assert is a check for something that is NOT expected to happen and should compile to nothing when non assert builds are built. here quite clearly foo can be larger than array.length; I assume your code should have been (where getting to the end would be an error) for(int foo=0; assert(foo<array.length); foo++) if(do_test(array[foo])) break; arrays should be bounds checked in asserting builds (IMHO) also asserts SHOULD not have side effects the code foo = 0; do { assert( ++foo < array.length ); count += array[foo]; } while( count < 100 ); should be a compiler warning (modification withing an assert) Mike.
Nov 01 2002









Burton Radons <loth users.sourceforge.net> 