¿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?

Respuestas a la pregunta(16)

Su respuesta a la pregunta