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