¿Cómo puedo solucionar advertencias como: "comparación entre firmado y sin firmar"?
Se me ha aconsejado que use las siguientes opciones con GCC, ya que ayuda a evitar muchos errores comunes. Enciende un montón de advertencias y-Werror
los convierte en errores.
gcc -pedantic -W -Wall -Wextra -Wshadow -Wstrict-overflow=5 -Wwrite-strings -std=c99 -Werror
Dado el siguiente código de prueba:
#include <stdio.h>
int main(void)
{
int arr[8]={0,10,20,30,40,50,60,70};
int x;
printf("sizeof(arr): %d\n", sizeof(arr));
printf("sizeof(int): %d\n", sizeof(int));
for(x = 0; x < sizeof(arr)/sizeof(int); x++)
{
printf("%d\n",arr[x]);
}
return 0;
}
Entiendo esto
test.c:11: error: comparison between signed and unsigned
Sé que una forma de solucionar esto es desactivar las advertencias, pero al final no me obligaron a usar esta configuración para desactivarlas.
Otra forma es lanzar las cosas, pero me han dicho que el casting está en desuso.
Además, podría convertir x en unaunsigned int
:
unsigned x;
Pero no resuelve el problema general cuando tengo que comparar valores con signo con valores sin signo usando estas opciones del compilador. ¿Existe una forma más limpia en lugar de lanzar?