为什么'false'的类型是int?(CS50)
当我的 argv[1] 包含字母以外的某些字符时,我想退出程序。因此,我声明:
for(int j = 0, p = strlen(argv[1]); j < p; j++)
{
if (false(isalpha(argv[1][j])))
{
printf("invalid charactern");
return 1;
}
}
但它说错误:称为对象类型“int”不是函数或函数指针。我不明白这是什么意思。这是来自 CS50 week2 的问题 - 换人。
回答
C 中没有命名的内置函数false。您的表达式false(isalpha(argv[1][j]))具有 形式false(x),因此它看起来像一个函数调用。
标头<stdbool.h>定义了一个扩展为整数常量零的宏。所以false(x)是有效的0(x)。在此,0是一个int常数。编译器消息“被调用的对象类型 'int' 不是函数或函数指针”告诉您不能像调用int 0函数一样调用它。
如果您的程序中有一些名为 的函数false,它可能已被包含<stdbool.h>(或可能是其他一些头文件)有效地覆盖。如果是这样,您应该重命名您的函数。
要测试表达式是否为“false”,您可以使用!运算符:
if (!isalpha(argv[1][j]))
{
// Code here will be executed when isalpha(argv[1][j]) is false.
}