Thread overview
Let the lauding continue ...
Jun 11, 2003
Matthew Wilson
Jun 12, 2003
Heinz Saathoff
Jun 12, 2003
Walter
June 11, 2003
Another nice one that I can never get any version of VC++ to deal with correctly

bool    bCorrect     =    true;
int        x;

switch(something)
{
    default:
        bCorrect = false;
        break;
    case ...:
        x = 1;
        break;
    case ...:
        x = 2;
        break;
    case ...:
        x = 3;
        break;
}

if(bCorrect)
{
    y = x; // VC++ warns that x may be used without having been initialised.
Pah!
}

DMC++ (along with others) handles this one nicely


June 12, 2003
Matthew Wilson schrieb...
> Another nice one that I can never get any version of VC++ to deal with correctly
> 
> bool    bCorrect     =    true;
> int        x;
> 
> switch(something)
> {
>     default:
>         bCorrect = false;
>         break;
>     case ...:
>         x = 1;
>         break;
>     case ...:
>         x = 2;
>         break;
>     case ...:
>         x = 3;
>         break;
> }
> 
> if(bCorrect)
> {
>     y = x; // VC++ warns that x may be used without having been initialised.
> Pah!
> }
> 
> DMC++ (along with others) handles this one nicely

In this case it's obvious that x is initialized. But in general it might not be so easy for a compiler to detect this.

BTW, some warnings about uninitialized variables are only issued when the files are compiled with optimization enabled. Without optimizations the compiler does not detect these bugs.

- Heinz

June 12, 2003
"Heinz Saathoff" <hsaat@bre.ipnet.de> wrote in message news:MPG.19524b67e8ac27a99896c2@news.digitalmars.com...
> In this case it's obvious that x is initialized. But in general it might not be so easy for a compiler to detect this.

DMC++ only issues the warning if it can prove that the variable is uninitialized, i.e. that there is *no* path that initializes it.

> BTW, some warnings about uninitialized variables are only issued when the files are compiled with optimization enabled. Without optimizations the compiler does not detect these bugs.

The information to detect this is gathered as a side effect of the optimization process.