Могу ли я предупредить GCC о передаче слишком широких типов в функции?
Ниже приведен некоторый явно неисправный код, для которого, как мне кажется, компилятор должен выдавать диагностическое сообщение. Но ни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 может попробовать мой тестовый пример.