isalpha()
被声明在ctype.h
知道即使isalpha
(以及所有isxxx
系列函数)的参数是 an int
,如果参数为负数,行为也是未定义的,这可能是件好事。因此,如果您使用的char
是默认签名的机器,除非您先进行投射,否则您可能会遇到麻烦。像这样:
char c;
// Some code
if(isalpha((unsigned char) c)) {
始终为这些函数强制转换可能是一个好习惯。但是,不要将强制转换用作消除警告的 goto。它可以轻松隐藏错误。在大多数情况下,当需要强制转换时,您的代码在其他方面是错误的。关于选角的咆哮
这些函数(以及许多其他将 an 返回为布尔值的 C 函数int
)的另一个缺陷是它们需要在 false 时返回零,但允许在 true 时返回任何非零值。所以像这样的检查完全是胡说八道:
if( isalpha(c) == 1 )
而是执行以下任何操作:
if( isalpha(c) != 0 ) // If not zero
if( isalpha(c) ) // Use directly as Boolean (recommended)
if( !! isalpha(c) == 1) // Double negation turns non zero to 1