2011-04-05 10 views
20

के बारे में चेतावनी नहीं देंगे निम्न स्निपेट में कोई चेतावनी नहीं दी जाती है। जी ++ 4.4.3 -Wall -pedanticg ++- डबल-> 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

हाँ यह काम कर देता है इसके बाद के संस्करण एक त्रुटि मिल जाएगा। मुझे यह वास्तव में अजीब लगता है कि इसमें शामिल नहीं है -वॉल। –

+1

यह पूर्णांक से संबंधित रूपांतरणों के साथ सैकड़ों चेतावनियों का कारण बनता है, और यही कारण है कि यह '-Wall' में सक्षम नहीं है। शायद https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53001 के साथ यह आसान होगा। – kwesolowski

20

उपयोग -Wconversion विकल्प पर कुछ भी उचित नहीं मिल सकता है। -Wall इसमें शामिल नहीं है।

चेतावनी: 'int' बदलती जाती है 'डबल' निरंतर मूल्य
चेतावनी के लिए रूपांतरण: रूपांतरण 'int' के लिए 'डबल' को बदल सकता है अपने मूल्य से

-Wconversion विकल्प के साथ, जीसीसी इन चेतावनी संदेश देता है

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 विकल्प के साथ)