Following is some obviously-defective code for which I think the compiler should emit a diagnostic. But neither gcc
nor g++
does, even with all the warnings options I could think of: -pedantic -Wall -Wextra
#include <stdio.h>
short f(short x)
{
return x;
}
int main()
{
long x = 0x10000007; /* bigger than short */
printf("%d
", f(x)); /* hoping for a warning here */
return 0;
}
Is there a way to make gcc
and g++
warn about this? On a side note, do you have another compiler which warns about this by default or in a fairly common extra-warnings configuration?
Note: I'm using GCC (both C and C++ compilers) version 4.2.4.
Edit: I just found that gcc -Wconversion
does the trick, but the same option to g++
doesn't, and I'm really using C++ here, so I need a solution for g++
(and am now wondering why -Wconversion
doesn't seem to be it).
Edit: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34389 suggests that this may be fixed in g++ 4.4
...maybe? It's not clear to me yet if it's the same issue and/or if the fix is really coming in that version. Maybe someone with 4.3 or 4.4 can try my test case.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…