这个字母应该是未签名的吗?

And*_*ith 5 c char character-encoding visual-studio-2008

我在代码审查期间发现了一些令人困惑的代码,我有点困惑.做了一些研究我发现了这种情况.我写了这个代码示例来突出问题

char d = '©';// this is -87,the copyright symbol , (actually its 169 unsigned)
if(ispunct(d)) // will assert. 
{           
}
Run Code Online (Sandbox Code Playgroud)

所以,修复bug的程序员做了以下事情:

char d = '©';// this is -87,the copyright symbol , (actually its 169 unsigned)
if(ispunct((unsigned char)d)) // will not assert, because it will be 169.
{           
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否可以使char未签名?理想情况下,我不会使用charUnicode字符来避免这类问题,但软件很老,不会很快重新设计.

我正在使用Visual Studio 2008. ispunct()可以找到ctype.h.

小智 7

在这种情况下,演员是正确的.来自man ispunct:

ispunct()功能试验对于除空间的任何打印字符(' ')或字符,其isalnum(3)true.参数的值必须可表示为unsigned char或的值EOF.