"由原型引起的不同宽度"警告意味着什么?

Ada*_*M-W 7 c warnings char width

产生警告的代码,由于原型,传递'isHex'的参数1,宽度不同:

/* 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;
}
Run Code Online (Sandbox Code Playgroud)

这是什么意思,这些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中删除任何警告选项,因为分配的标记条件之一是此命令没有错误或警告.

谢谢.

Ted*_*opp 8

这是由命令行上的-Wconversion标志引起的.它弹出"如果原型导致的类型转换与在没有原型的情况下相同的参数会发生的转换不同." 由于默认的整数参数类型是int,因此在isHex(char ch)不触发此操作的情况下无法声明.

我认为你有两个选择:声明isHex(int ch)并让它在调用中加宽,或者声明它isHex(char *ch)并更改调用.

PS如果这是作业,它应该被标记为这样.

  • 不管是不是家庭作业,这是一个非常明显的答案的好问题.它当然不是一个"plz give me teh codez"的问题. (6认同)