Dear colleagues, I have found a strange bit of code that works, but I think
it should not.

#include <stdio.h>
int main ()
{
    int iC = 0;
    for (iC = 1; iC < 5; iC++) {
        switch (iC)
            case 1:
        { // Wrong?, but it works fine!.
                printf("ONE\n");
                break;
            case 2:
                printf("TWO\n");
                break;
            default:
                printf("NO!\n");
                break;
        }
    }
    return 0;
}

The code compiles without any warning using clang 3.4.1 (FreeBSD 10.1) and
"-Wall" "--pedantic".  And the execution results are:
ONE
TWO
NO!
NO!

Of course, I have tried the code with the curly brace in its right position:
switch (iC) {
        case 1:
And the results are the same.

I have compared the assembly files (.s) and both are the same, disregarding
the curly brace position.

Could anybody explain why both codes work the same way?

I have tried with "Microsoft Visual C 6" and "Microsoft Visual Studio 2010"
with the same results.  Also GCC compiles it without any warning (sorry for
the version).

Best Regards,
   Germán Marcos.
_______________________________________________
cfe-users mailing list
cfe-users@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users

Reply via email to