2011-04-05 75 views
20

在下面的代碼片段中不會產生任何警告。 G ++ 4.4.3 -Wall -pedanticg ++ -Wall不會警告double-> int cast

//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

回答

24
$ gcc -Wconversion test.c 

test.c: In function ‘main’: 
test.c:3: warning: conversion to ‘int’ from ‘double’ may alter its value 
+3

是這樣做的伎倆。我覺得它真的很奇怪,它不包含在-Wall中。 – 2011-04-05 14:16:54

+1

它會導致數百個帶有整數相關轉換的警告,這就是爲什麼它沒有在'-Wall'中啓用的原因。也許與https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53001它會更簡單。 – kwesolowski 2014-09-03 12:05:15

20

使用-Wconversion選擇什麼合適。 -Wall不包括它。

隨着-Wconversion選項,GCC給出這些警告消息:從「雙」可改變其值變換到「INT」:

警告:轉換到「INT」塗改「雙」恆定值
警告

6

除了什麼其他的答案,何況這也是值得一提的是,在的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選項)