返回值中的函数混淆,啥是明确的真假?

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 不为零。

【讨论】:

以上是关于返回值中的函数混淆,啥是明确的真假?的主要内容,如果未能解决你的问题,请参考以下文章

SymPy的dsolve的返回值中的r()函数是啥意思?

js遍历ajax回调函数返回值中的object对象

在函数指针返回值中转换对指针的引用

Python 语法:如何检查返回值中是不是存在“x”?

在函数返回值中定义新类型

228Excel 函数说明