This seems like what could be a common cause of bugs

Steven Schveighoffer schveiguy at yahoo.com
Mon Jul 11 05:17:50 PDT 2011


On Sat, 09 Jul 2011 13:28:25 -0400, Nick Sabalausky <a at a.a> wrote:

> "Steven Schveighoffer" <schveiguy at yahoo.com> wrote in message
> news:op.vybq4xkkeav7ka at localhost.localdomain...
>> On Fri, 08 Jul 2011 18:45:58 -0400, Andrej Mitrovic
>> <andrej.mitrovich at gmail.com> wrote:
>>
>>> This is just an observation, not a question or anything.
>>>
>>> void main()
>>> {
>>>     enum width = 100;
>>>     double step = 1 / width;
>>>
>>>     writeln(step);  // 0
>>> }
>>>
>>> I've just had this bug in my code. I forgot to make either width or 1
>>> a floating-point type. IOW, I didn't do this:
>>>
>>> void main()
>>> {
>>>     enum width = 100.0;
>>>     double step = 1 / width;   // or .1
>>>
>>>     writeln(step);  // now 0.01
>>> }
>>>
>>> This seems like a very easy mistake to make. But I know the compiler
>>> is probably powerless to do anything about it. It has an expression
>>> resulting in an int at the RHS, and it can easily cast this to a
>>> double since there's no obvious loss of precision when casting
>>> int->double.
>>
>> BTW, this is definitely not something the compiler can determine.  You  
>> may
>> actually *want* to have integer division then convert to a double.
>>
>> So a lint tool would be perfect for this -- it cannot be an error, and
>> warnings don't exist in D.
>>
>
> Yea they do: dmd -wi

Hm... I didn't know about that switch, I thought warnings were enabled  
with -w and that made them errors.

I suppose you could stick this in there.

-Steve


More information about the Digitalmars-d-learn mailing list