This seems like what could be a common cause of bugs

Nick Sabalausky a at a.a
Mon Jul 11 13:46:07 PDT 2011


"Steven Schveighoffer" <schveiguy at yahoo.com> wrote in message 
news:op.vyge30ogeav7ka at localhost.localdomain...
> 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.
>

-wi: Enable warnings
-w: Enable warnings and treat them as errors

Didn't used to have -wi, but I bugged the hell out of Walter about it. ;)

The --help screen describes -w and -wi differently than above, but the above 
is more accurate.




More information about the Digitalmars-d-learn mailing list