isalpha实现C.

时间:2016-10-25 19:49:49

标签: c function implementation

只是为了好玩,我写了这个isalpha的实现,它有效,但我有很多警告,你能告诉我如何解决它们,或者我怎样才能更好地做到这一点?

警告:

第6行:指针和整数之间的比较

第23行:传递'指针'的参数1从没有强制转换的整数生成指针

#include <stdlib.h>
#include <stdio.h>

int my_isalpha(char *mark)
{
    if((((mark)>=0x41)&&((mark)<=0x5A)||((mark)>=0x61)&&((mark)<=0x7A))) //WARNING
     return 1;

   else
    return 0;
}


int main()
{
   char mark;
   int (*pointer)(char*);
   pointer=my_isalpha;

   printf("Your mark: ");
   scanf("%c",&mark);

   if(pointer(mark))  //WARNING
     printf("TRUE");

   else
    printf("FALSE");

  return 0;
}

1 个答案:

答案 0 :(得分:1)

此代码不可移植,因为标准甚至不保证执行字符集按顺序包含拉丁字母的字母。例如,请参阅herehere

这是一个更便携的版本:

isalpha()

正如@Dmitri在评论中指出的那样,如果在运行时更改执行字符集,即使这些代码可能也会失败,因为字符的数值不再与编译时相同。因此,最好使用标准库函数isalpha(),它使用当前的语言环境。

@KeithThompson建议我对可移植性的关注可能有点错位,因为AA = ones(10,2) + j*ones(10,2) whos for i=1:10 AA(i,2) = i + sqrt(i); end AA whos 是一个必须在包含它的实现中工作的库函数,但本身并不需要用便携式C编写。这是一个很好的观点,除了说我正在解决你提出的问题的一部分时,我没有真正的防御,&#34;我怎样才能以更好的方式做到这一点?&#34;

有了这些警告,我现在就留下我的答案......