1 =假,0 =真?

我在ac API中遇到了一个is_equals()函数,它返回1表示不相等的sql表(false),0表示相等的sql表(true)。 在我的代码上运行测试用例之后我才意识到这一点,一个用于正面示例,另一个用于负面,它们都失败了,起初没什么意义。 API中的代码没有错误,因为输出在其文档中正确记录。

我的问题 – 是否存在颠倒的世界/平行宇宙/编码语言,这种逻辑符号是否正常? 通常不是1吗? API的编码器是否出错?

比较函数通常在“等于”时返回0 ,因此它们也可以返回“小于”的负数和“大于”的正数。 strcmp()memcmp()就像这样工作。

然而,惯性是零为假,非零为真,因为这是C流控制和逻辑布尔运算符的工作方式。 所以可能是为这个函数选择的返回值很好,但是函数的名称是错误的(它应该只是称为compare()或类似)。

这种颠倒世界在过程错误返回时很常见。 shell变量$? 报告从shell执行的前一个程序的返回值,因此很容易判断程序是成功还是失败:

 $ false ; echo $? 1 $ true ; echo $? 0 

之所以选择这个是因为有一个程序成功的情况,但程序失败可能有很多原因 – 通过允许有许多不同的故障错误代码,程序可以确定为什么另一个程序失败而不必解析输出。

一个具体的例子是随AppArmor 强制访问控制工具提供的aa-status程序:

  Upon exiting, aa-status will set its return value to the following values: 0 if apparmor is enabled and policy is loaded. 1 if apparmor is not enabled/loaded. 2 if apparmor is enabled but no policy is loaded. 3 if the apparmor control files aren't available under /sys/kernel/security/. 4 if the user running the script doesn't have enough privileges to read the apparmor control files. 

(我确信有更广泛传播的程序有这种行为,但我很清楚这一点。:)

我怀疑它只是遵循Linux / Unix标准 成功返回0 。

真的说“1”是假的而“0”是真的吗?

没有充分的理由让1为真, 0为假; 这就是事情总是被注意到的方式。 因此从逻辑角度来看,API中的函数本身并不“错误”。

也就是说,通常不建议使用你正在使用的任何语言或框架的习惯用语而没有充分的理由这样做,所以写这个函数的人可能很头脑,假设它不仅仅是一个bug。

这可能是原作者的一个错误,但是1是真,0是假的概念不是一个普遍的概念。 在shell脚本中,为了成功返回0,为失败返回任何其他数字。 在其他语言(如Ruby)中,只有nil和false被认为是false,而任何其他值都被认为是真的,所以在Ruby中,1和0都被认为是真的。

我不确定我是否正确回答了这个问题,但这是一个熟悉的例子:

如果出现错误,Windows中GetLastError()的返回类型为非零,否则为零。 反之通常是您调用的函数的返回值。