我最近下載了MinGw編譯器,出於某種原因,它不顯示和警告消息,當我應該執行明確的轉換時。編譯器不會顯示警告消息以進行明確的轉換
例如:
double x=9.97;
int y=x;
這似乎是確定的編譯器。我只是想知道是否需要安裝其他一些軟件包
我最近下載了MinGw編譯器,出於某種原因,它不顯示和警告消息,當我應該執行明確的轉換時。編譯器不會顯示警告消息以進行明確的轉換
例如:
double x=9.97;
int y=x;
這似乎是確定的編譯器。我只是想知道是否需要安裝其他一些軟件包
將double
分配給int
時不需要強制轉換。小數部分僅被截斷。如果您需要警告,您可以使用-Wconversion
或-Wfloat-conversion
。
爲了補充對方的回答,關於隱式轉換語義的技術說明可在http://en.cppreference.com/w/c/language/conversion找到:
任何真正的浮動型的有限值可以被隱式轉換爲任何整數類型。除了上述布爾轉換覆蓋的地方外,規則如下:
- 小數部分被丟棄(截斷爲零)。
。如果結果值可以用目標類型表示,則使用該值
。否則,行爲是不明確的
您的引用很有幫助,但這是一個C問題,請不要將OP與此C++網站的鏈接混淆。這個網站充滿了不精確性和錯誤。例如在您鏈接到的vey頁面上:*'2u - 10; //帶符號/無符號,相同等級 // 10轉換爲無符號,無符號數學模爲INT_MAX //結果爲4294967288類型爲無符號整型(aka INT_MAX-7)'* – chqrlie
準確地說,該網站是關於C++ * *和** C.我鏈接到一個專門關於C.的頁面,足以指出不精確性和錯誤。該網站雖然是一個wiki,所以我相信你可以爲它做出貢獻並修復這些錯誤來改善它。我根本沒有隸屬於它,但我仍然認爲它是一個有用的信息來源。 – SirDarius
點好了。我可以投入一些時間來嘗試修復我在這個網站上遇到的錯誤,但它是非常令人難以置信的,我不會用一個10英尺的杆子碰觸C++頁面。 – chqrlie
我認爲截斷會導致錯誤。這就是爲什麼我認爲你需要一個鑄造操作員。 – user3223190
對不起,我還沒弄明白。我知道在java中,如果我們正在轉換,並且信息丟失,我們需要一個鑄造操作符。那麼C中的新編譯器是否接受它而不會引發警告信息? – user3223190
C和Java是不同的語言。不要比較它們。 C是一種鬆散類型的語言。在C中,不需要強制轉換。它不僅僅是這種新C編譯器。他們都是。並且*有一種方法可以在需要時啓用警告。如果您使用GCC,只需使用'-Wconversion'或'Wfloat-conversion'。 –