调用C函数从ObjC中取bool而不是BOOL

时间:2017-06-08 17:38:11

标签: objective-c cocoa types

在我的ObjC代码中,我调用的函数的参数类型为bool(不是BOOL)。

我应该从我的ObjC代码中将YES传递给此参数,还是传递true应该是正确的?

这个问题是关于惯例,而不是功能正确性。

2 个答案:

答案 0 :(得分:2)

这实际上取决于您的构建设置。请参阅相关答案Objective-C : BOOL vs bool

BOOLbool可以指同一类型,但有时候他们不会。

为安全起见,请始终使用正确的类型,即falsetrue bool

差异主要见于罕见的边缘情况,但如果出现,则很难找到。

出于同样的原因,我们在与C API交互时使用NULL而不是nil,即使它们通常只是0的宏。他们的类型仍然不同。

答案 1 :(得分:2)

惯例,如果存在于任何正式意义上,将适用于bool / true / falseBOOL / {{ 1}} / YES

至于功能正确性你是正确的,但是“设计一个表现出差异的例子”很难(但并非不可能[1])。 C中的布尔逻辑基于整数,“布尔”值运算符(NO>)返回整数而不是任何布尔值。

HTH

[1]例如考虑使用&&和不同的平台(macOS,iOS等),如果你想设想一些东西。