Se me ha recomendado usar las siguientes opciones con GCC, ya que ayuda a evitar muchos errores comunes. Enciende un montón de advertencias y -Werror
las convierte en errores.¿Cómo puedo corregir advertencias como: "comparación entre firmado y sin firmar"?
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;
}
me sale esto:
test.c:11: error: comparison between signed and unsigned
Sé que una manera de que pueda solucionar este problema es apagar las advertencias, sino que haven' Me hizo usar estos ajustes para apagarlos al final.
Otra forma es lanzar las cosas, pero me han dicho que el casting está en desuso.
Además, podría hacer x en un unsigned int
:
unsigned x;
Pero esto no resuelve el problema general cuando tengo que comparar los valores firmados con valores sin signo utilizando estas opciones del compilador. ¿Hay una manera más limpia en lugar de lanzar?
Tenga en cuenta que 'sizeof' devuelve' size_t' que debe imprimirse usando ['% zu'] (http://stackoverflow.com/q/940087/995714) –