what are the most common bugs in your D apps?

Jarrett Billingsley jarrett.billingsley at gmail.com
Sun Apr 12 07:28:01 PDT 2009


On Sun, Apr 12, 2009 at 9:28 AM, bearophile <bearophileHUGS at lycos.com> wrote:
> The following one isn't a problem of D, it's a small bug I've created while translating C code to D.
> Here I have reduced the code to a very small proggy, so you probably need only a moment to spot the problem.
> This program takes a string that contains more than one natural numbers, and returns their sum.
> Example:
> 200+350 => 550
>
> The original C code:
>
> #include <stdio.h>
>
> int main() {
>    char* numbers = "200 350";
>
>    int total = 0;
>    char* p = &numbers[0];
>    int cur = 0;
>
>    while (*p != 0) {
>        char c = (*p) - 48;
>        if (c >= 0) {
>            cur = (cur * 10) + c;
>        } else {
>            total += cur;
>            cur = 0;
>        }
>        p++;
>    }
>    total += cur;
>
>    printf("total: %d\n", total);
>    return 0;
> }

Your C code also contains a bug, if chars are unsigned.

I will agree, however, that the D compiler (*all* compilers for all
languages, really!) should detect and complain about "nontrivial
trivial" comparisons - comparisons that *look* nontrivial (like "c >=
0"), but which always evaluate to true or always to false.



More information about the Digitalmars-d mailing list