数组下标有类型' char'显示警告而不使用数组

时间:2014-07-15 02:46:41

标签: c warnings ctype

嗨,我在这个简单的代码中得到了这个奇怪的警告,让我完全糊涂了。我通过页面搜索,我发现这是一个提醒用户避免使用字符作为矩阵索引的警告,因为它们可以被签名,但显然情况并非如此。

以下是代码:

#include <stdio.h>
#include <ctype.h>

int main() {

    char c='t';
    if (isspace(c)==0)
        printf ("%c is not a space",c);

    return (EXIT_SUCCESS);
}

我的问题是警告的原因是什么?是否与isspace期望int作为参数的事实相关?

1 个答案:

答案 0 :(得分:1)

  

警告提醒用户避免使用字符作为矩阵索引,因为它们可以被签名,但显然情况并非如此

实际上,情况就是这样......你看到的不是编译器所看到的。

  

是否与isspace期望int作为参数这一事实相关?

是; isspace是一个宏(在你的编译器实现中)访问一个数组...看看你的ctype.h或者让你的编译器扩展宏(例如,gcc -E),你会看到数组访问

要避免警告,请使用

if (!isspace((unsigned char)c))