g ++ -не предупреждает о двойном - PullRequest
21 голосов
/ 05 апреля 2011

В следующем фрагменте предупреждения не выдаются.g ++ 4.4.3 -Wall -pedantic

//f is
void f(int );

f(3.14);
double d = 3.14;
int i = d+2;

Я хорошо помню, что это предупреждение, что-то вроде «Возможной потери точности»Это было удалено или моя память играет со мной шутки?

Как я могу превратить это в предупреждение в g ++?Я считаю это полезным предупреждением, или это плохая идея?

Я даже не могу найти ничего подходящего в http://gcc.gnu.org/onlinedocs/gcc-4.4.5/gcc/Warning-Options.html

Ответы [ 3 ]

26 голосов
/ 05 апреля 2011
$ gcc -Wconversion test.c

test.c: In function ‘main’:
test.c:3: warning: conversion to ‘int’ from ‘double’ may alter its value
21 голосов
/ 05 апреля 2011

Используйте параметр -Wconversion.-Wall не включает его.

С опцией -Wconversion GCC выдает следующие предупреждающие сообщения:

предупреждение: преобразование в int изменяет двойное постоянное значение
предупреждение: преобразование в 'int' из 'double' может изменить его значение

7 голосов
/ 05 апреля 2011

Помимо того, что упоминают другие ответы, также стоит упомянуть, что в C ++ 0x {} инициализация не сужается. Таким образом, вместо предупреждения вы получите сообщение об ошибке, например

void f(int x)
{
   // code
}

int main()
{
   f({3.14}); // narrowing conversion of '3.14000000000000012434497875801753252744674682617e+0' from 'double' to 'int' inside { }
}

g ++ 4.4 и выше список инициализаторов поддержки (с опцией -std=c++0x)

...