views:

431

answers:

2

Consider the following test program:

static void func(int a)
{
}

int main()
{
    unsigned int b = 42;

    func(b);

    return 0;
}

Compiling it with gcc:

lol@mac:~/projects$ gcc -Wconversion testit.c
testit.c: In function âmainâ:
testit.c:11: warning: passing argument 1 of âfuncâ as signed due to prototype
lol@mac:~/projects$

But, g++ there is no warning!:

lol@mac:~/projects$ g++ -Wconversion testit.c
lol@mac:~/projects$

What is the reason for this and is there anyway to get the same warning when compiling C++ code?

+1  A: 

Just saw http://stackoverflow.com/questions/310108/can-i-make-gcc-warn-on-passing-too-wide-types-to-functions

Shoudl have searched before posting

+2  A: 

From the documentation for -Wconversion:

Warnings about conversions between signed and unsigned integers are disabled by default in C++ unless -Wsign-conversion is explicitly enabled.

Seems that you'll need a sufficiently new version of GCC, too. I have version 4.0.1, and it doesn't recognize -Wsign-conversion.

Rob Kennedy