Sé que esta es una pregunta simple pero estoy confundido. Tengo una advertencia bastante típico gcc que es generalmente fácil de solucionar:
warning: comparison between signed and unsigned integer expressions
constante hexadecimal en c no está firmada aunque utilicé el sufijo L
Cada vez que tengo una constante hexadecimal con el bit más significativo, como 0x80000000L, el compilador lo interpreta como signo. Por ejemplo compilar este código con -Wextra hará que el aviso (4.4x gcc, 4.5x):
int main()
{
long test = 1;
long *p = &test;
if(*p != 0x80000000L) printf("test");
}
He sufijada específicamente la constante todo el tiempo, así que por qué sucede esto?
posible duplicado de [Constante hexadecimal sin signo en C?] (Http://stackoverflow.com/questions/4737798/unsigned-hexadecimal-constant-in-c) – Nemo
FWIW, gcc 4.6.1 en Linux, con '- Wall -ansi -pedantic' emitió solo una advertencia, sobre el control que llega al final de la función no-vacía. ¿Posiblemente otra característica que no llegó a la cima de la prioridad de los escritores del compilador hasta hace muy poco? – vpit3833