Comment puis-je corriger les avertissements comme: "comparaison entre signé et non signé"?

J'ai été conseillé d'utiliser les options suivantes avec GCC, car il permet d'éviter beaucoup d'erreurs courantes. Il tourne sur un tas de mises en garde et -Werror les transforme en des erreurs.

gcc -pedantic -W -Wall -Wextra -Wshadow -Wstrict-overflow=5 -Wwrite-strings -std=c99 -Werror

Suivants du code de test:

#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;
}

J'obtiens ceci:

test.c:11: error: comparison between signed and unsigned

Je sais que dans un sens, je peux résoudre ce problème est de désactiver les mises en garde, mais ils n'ont pas fait de moi l'utilisation de ces paramètres pour les éteindre à la fin.

Une autre façon est de jeter des trucs, mais on m'a dit que le casting est obsolète.

Aussi, j'ai pu faire x dans un unsigned int:

unsigned x;

Mais ça ne résout pas le problème général quand je dois comparer les valeurs signées avec des valeurs non signées à l'aide de ces options du compilateur. Est-il le moyen le plus propre au lieu de casting?

source d'informationauteur George | 2009-05-13