A continuación se muestra un código obviamente defectuoso para el cual creo que el compilador debería emitir un diagnóstico. Pero ni gcc
ni g++
hace, incluso con todas las opciones de advertencias que se me ocurrieron: -pedantic -Wall -Wextra
¿Puedo hacer que GCC advierta sobre el paso de tipos demasiado amplios a las funciones?
#include <stdio.h>
short f(short x)
{
return x;
}
int main()
{
long x = 0x10000007; /* bigger than short */
printf("%d\n", f(x)); /* hoping for a warning here */
return 0;
}
¿Hay una manera de hacer gcc
y g++
advierten sobre esto? En una nota lateral, ¿tiene otro compilador que advierta sobre esto de manera predeterminada o en una configuración de advertencias extra bastante común?
Nota: Estoy usando GCC (compiladores C y C++) versión 4.2.4.
Edit: acaba de encontrar que gcc -Wconversion
hace el truco, pero la misma opción de g++
no lo hace, y realmente estoy usando C++ aquí, así que necesitan una solución para g++
(y ahora pregunto por qué -Wconversion
doesn' parece ser eso).
Editar: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34389 sugiere que esto se puede solucionar en g++ 4.4
... ¿tal vez? Aún no me queda claro si es el mismo problema o si la solución realmente viene en esa versión. Tal vez alguien con 4.3 o 4.4 pueda probar mi caso de prueba.
Aha - entonces es solo que 4.2.4 es demasiado "viejo" para advertirlo como debería, y 4.3.2 funciona (estoy haciendo un par de suposiciones aquí, pero creo que es seguro decirlo porque estoy usando Ubuntu y vi algunas notas sobre el tema que hacen que parezca razonable pensar que esto es algo arreglado en 4.3+. –
Ahora he intentado con GCC 4.3.2 en una máquina Ubuntu Intrepid, y -Wconversion hace lo que quiero. Hooray. Pero boo para 4.2.4 no funciona. –
falta una mención de -Wsign -conversión para g ++ (necesario al menos en versiones más nuevas) ... – codeling