Как я могу исправить такие предупреждения, как: «сравнение между подписанным и неподписанным»?

Мне посоветовали использовать следующие опции с GCC, так как это помогает избежать многих распространенных ошибок. Это включает кучу предупреждений и-Werror превращает их в ошибки.

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

Учитывая следующий тестовый код:

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

Я получаю это:

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

Я знаю, что один из способов исправить это - отключить предупреждения, но они не заставили меня использовать эти настройки, чтобы отключить их в конце.

Другой способ - разыграть вещи, но мне сказали, что кастинг устарел.

Кроме того, я мог бы сделать х вunsigned int:

unsigned x;

Но это не решает общую проблему, когда мне приходится сравнивать значения со знаком и значения без знака, используя эти параметры компилятора. Есть ли более чистый способ вместо кастинга?

Ответы на вопрос(8)

Ваш ответ на вопрос