Что означает предупреждение «другая ширина из-за прототипа»? - PullRequest
7 голосов
/ 01 апреля 2011

Код, генерирующий предупреждение, передавая аргумент 1 из isHex с различной шириной из-за прототипа:

/* Checks if a character is either 0-9 or A-F */
int isHex(char ch) {
    return isdigit(ch) || (ch >= 65 && ch <= 70);
}

/* Checks if a string only contains numeric characters or A-F */
int strIsHex(char * str) {
    char *ch;
    size_t len = strlen(str);
    for(ch=str;ch<(str+len);ch++) {
        if (!isHex(*ch)) return 0;
    }
    return 1;
}

Что это значит, не должны ли значения char быть одинаковой ширины? Как я могу привести их к той же ширине, чтобы предотвратить это предупреждение?

Кстати, команда gcc была: gcc.exe -std=c99 -fgnu89-inline -pedantic-errors -Wno-long-long -Wall -Wextra -Wconversion -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -fshort-enums -gstabs -l"C:\program files\quincy\mingw\include" -o main.o -c main.c

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

Спасибо.

1 Ответ

8 голосов
/ 01 апреля 2011

Это связано с флагом -Wconversion в командной строке. Появляется «если прототип вызывает преобразование типа, которое отличается от того, что произошло бы с тем же аргументом в отсутствие прототипа». Поскольку тип целочисленного аргумента по умолчанию - int, вы не можете объявить isHex(char ch), не вызывая его.

Я думаю, у вас есть два варианта: объявить isHex(int ch) и разрешить его расширение в вызове, либо объявить его isHex(char *ch) и изменить вызов.

P.S. Если это домашнее задание, оно должно быть помечено как таковое.

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