返回值中的函数混淆,啥是明确的真假?
Posted
技术标签:
【中文标题】返回值中的函数混淆,啥是明确的真假?【英文标题】:Function confusion in return value, what is true and false explicitly?返回值中的函数混淆,什么是明确的真假? 【发布时间】:2013-09-25 00:00:50 【问题描述】:我是 C 的新手,在 StackExchange 和所有其他来源中,0
是成功的,否则是 false
。在这个打印素数的函数中,为什么它只在return
值为1时打印素数?
如果我去(is_prime(num) == 0)
,那么它不会打印素数,但如果只是说is_prime(num)
,它会自动假定(is_prime(num) == 1)
?
这让我很困惑,请澄清,因为值会在 0 和 1 之间切换,但为什么会自动偏置?
int is_prime(int num)
int isPrime = 1;
int i;
for(i = 2; i <= sqrt(num); i++)
if(num % i == 0)
isPrime = 0;
return isPrime;
【问题讨论】:
当问题是“发生了什么错误?”时,成功不是假的反面 我的问题是,为什么它会自动偏向 (is_prime(num) == 1),它应该打印所有内容,因为我没有说明它是否必须等于 1 或 0 【参考方案1】:我是 C 新手,在这里的 StackExchange 和所有其他来源中,0 表示成功,否则为假。
那是倒退。在 C 中,0 为假,非零值为真。
if (number) <==> if (number != 0)
if (!number) <==> if (number == 0)
这在大多数情况下都是正确的,并且是最常见的整数 → 布尔关系。映射反转的情况有一些例外:
main()
的返回值为 0 表示成功,非 0 表示失败。这样做的原因是,如果程序失败,您可能希望通过返回不同的退出代码来区分错误。例如,1 表示“错误的命令行参数”,2 表示“找不到文件”,3 表示“无法连接到服务器”等。这些退出代码的含义取决于应用程序。
许多 POSIX 系统调用,例如 close()
和 connect()
使用相同的想法,返回 0 表示成功,返回 -1 表示错误。对于这些函数,您必须编写 if (connect(...) != 0)
而不是 if (connect(...))
。
请注意,这些异常不是 C 语言本身的一部分,而是与常用的 C 函数有关。
【讨论】:
【参考方案2】:在 if 语句中,或任何正在测试布尔值(真或假)的情况下,至少在 C 中,0
表示假,任何非零整数都表示真。
如果由于某种原因,您的 isPrime 函数在给定一些输入 x
的情况下返回了 -17
,如果将 isPrime(x)
作为布尔值,则仍将被视为 true,因此如果您在 if 块中有一些代码,其条件是isPrime(x)
,该代码将运行,因为-17
不为零。
【讨论】:
以上是关于返回值中的函数混淆,啥是明确的真假?的主要内容,如果未能解决你的问题,请参考以下文章