for in D versus C and C++

Gide Nwawudu gide at btinternet.com
Thu Mar 19 13:01:21 PDT 2009


On Thu, 19 Mar 2009 14:16:25 -0400, Steve Teale
<steve.teale at britseyeview.com> wrote:

>Walter Bright Wrote:
>
>> BCS wrote:
>> >> Thu, 19 Mar 2009 06:35:37 -0400, Steve Teale wrote:
>> >>
>> >>> for (; a<b; a++);
>> >>>
>> >>> is illegal in D.
>> >>>
>> >>> Doesn't this break a lot of C and C++ code?
>> >>>
>> >> for (; a<b; a++) {}
>> >>
>> >> is legal.  I don't think that an empty statement after for is used in
>> >> "a lot of code."
>> >>
>> > 
>> > it's a trivial fix and easy to find. Heck, you hardly need to think!
>> 
>> No, it isn't easy to find. This is in D because a colleague of mine, who 
>> was an expert C programmer (the best in the company I was working for), 
>> came to me with:
>> 
>> for (xxx; i < 10; i++);
>> {
>>       ... code ...
>> }
>> 
>> and said he could not figure out why his loop executed only and exactly 
>> once. He'd fiddled with it for a whole afternoon. He said he must be 
>> missing something obvious. I said you've got an extra ; after the ). He 
>> smacked his head and about fell over backwards.
>> 
>> So it's illegal in D, along with:
>> 
>>     if (condition);
>> 
>> and similar constructs. Have to use a { } to indicate a blank statement.
>
>I just find this scary, because although it says at the top of the page "most of this will be familiar to C/C++ programmers" this little fact means I have to go through all of the familiar constructs with a fine tooth comb.
>
>Also, nobody is answering the question. I can work out the alternatives, but I'd just prefer it if existing code worked. I used to use the idiom I quote all the time.
>


> ... but I'd just prefer it if existing code worked ...

What D is saying, is that the existing code is likely to be wrong, and
should be altered before it compiles. Besides C!=D so I don't see the
problem.

Gide



More information about the Digitalmars-d mailing list