Следва някакъв очевидно дефектен код, за който смятам, че компилаторът трябва да издаде диагностика. Но нито gcc
, нито g++
го правят, дори с всички опции за предупреждения, за които се сещам: -pedantic -Wall -Wextra
#include <stdio.h>
short f(short x)
{
return x;
}
int main()
{
long x = 0x10000007; /* bigger than short */
printf("%d\n", f(x)); /* hoping for a warning here */
return 0;
}
Има ли начин gcc
и g++
да предупреждават за това? Като странична бележка, имате ли друг компилатор, който предупреждава за това по подразбиране или в доста често срещана конфигурация за допълнителни предупреждения?
Забележка: Използвам GCC (компилатори C и C++) версия 4.2.4.
Редактиране: току-що открих, че gcc -Wconversion
върши работа, но същата опция за g++
не и аз наистина използвам C++ тук, така че имам нужда от решение за g++
(и сега се чудя защо -Wconversion
не изглежда то).
Редактиране: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34389 предполага, че това може да бъде коригирано в g++ 4.4
... може би? Все още не ми е ясно дали проблемът е същият и/или корекцията наистина идва в тази версия. Може би някой с 4.3 или 4.4 може да опита моя тестов случай.