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