Сравнение unsigned char и EOF

при компиляции следующего кода он переходит в бесконечный цикл:

int main()
{
    unsigned char  ch;
    FILE *fp;
    fp = fopen("abc","r");
    if(fp==NULL)
    {
        printf("Unable to Open");
        exit(1);
    }
    while((ch = fgetc(fp))!=EOF)
    printf("%c",ch);
    fclose(fp);
    printf("\n",ch);
    return 0;
}

Компилятор gcc также выдает предупреждение о компиляции

abc.c:13:warning: comparison is always true due to limited range of data type

код работает нормально, когда unsigned char заменяется на char или int , как ожидалось, то есть завершается.
Но код также отлично работает для unsigned int . как я прочитал в EOF определяется как -1 в stdio.h , тогда почему этот код не работает для unsigned char, но отлично работает для unsigned int .

7
задан Amol Sharma 21 December 2011 в 08:11
поделиться