2010-01-04 11 views
6
int i = 3.1/2 

no causa ninguna advertencia, incluso con la opción de -Wall. A veces, me gustaría saber dónde pierde la precisión.¿Por qué gcc no admite esta advertencia, mientras que msvc admite esta?¿Por qué la asignación de double to int no activa las advertencias gcc?

gracias.

EDIT: mi -v gcc muestra

Configured with: ../../gcc-4.4.1/configure --prefix=/mingw --build=mingw32 --enable-languages=c,ada,c++,fortran,objc,obj-c++ --disable-nls --disable-win32-registry --enable-libgomp --enable-cxx-flags='-fno-function-sections -fno-data-sections' --disable-werror --enable-threads --disable-symvers --enable-version-specific-runtime-libs --enable-fully-dynamic-string --with-pkgversion='TDM-2 mingw32' --enable-sjlj-exceptions --with-bugurl=http://www.tdragon.net/recentgcc/bugs.php

+2

Puede ser útil saber que -Wall no activa todas las advertencias admitidas actualmente por el compilador. Es un conjunto de advertencias que estuvieron disponibles hace varios años. Usar -Wextra agrega algunos más, aunque no estoy seguro de si incluso eso incluye una advertencia de truncamiento. – Dipstick

+5

Discutible, primero debería tener una advertencia para el "3.1", ya que este número no se puede representar exactamente en un doble punto flotante IEEE 754. Y esta puede ser la razón por la cual gcc no te advierte: recibirías tantas advertencias que no serían útiles. –

+1

@chrisharris: incluso con -Wall -Wextra -ansi -pedantic, no funciona. – Jichao

Respuesta

10

-Wconversion advierte para la conversión implícita.

+0

pero no funciona en mi gcc-mingw 3.4.5 – Jichao

+0

¿Reconoce mingw esta opción, compruebe usando la opción gcc -v para obtener más detalles. – Andy

Cuestiones relacionadas