Ниже приведен некоторый явно дефектный код, для которого, я думаю, компилятор должен выдать диагностику. Но ни 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++
не работает, и я действительно использую здесь С++, поэтому мне нужно решение для g++
(и теперь мне интересно, почему -Wconversion
не кажется Это).
Изменить: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34389 предполагает, что это может быть исправлено в g++ 4.4
... возможно? Мне пока не ясно, является ли это той же проблемой и/или действительно ли исправление появится в этой версии. Может быть, кто-то с 4.3 или 4.4 может попробовать мой тестовый пример.