只是为了好玩,我写了这个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;
}
答案 0 :(得分:1)
此代码不可移植,因为标准甚至不保证执行字符集按顺序包含拉丁字母的字母。例如,请参阅here和here。
这是一个更便携的版本:
isalpha()
正如@Dmitri在评论中指出的那样,如果在运行时更改执行字符集,即使这些代码可能也会失败,因为字符的数值不再与编译时相同。因此,最好使用标准库函数isalpha()
,它使用当前的语言环境。
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;
有了这些警告,我现在就留下我的答案......