在ObjC中调用C函数,而不是BOOL,从ObjC

问题描述:

在我的ObjC代码中,我调用了一个函数,它有一个参数类型为bool(不是BOOL)的参数。在ObjC中调用C函数,而不是BOOL,从ObjC

我应该通过YES这个参数从我的ObjC代码,还是会传递true应该是正确的?

这个问题是关于约定,而不是功能的正确性。

这真的取决于您的构建设置。看到相关的答案Objective-C : BOOL vs bool

BOOLbool可以指相同的类型,但有时它们不会。

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

这种差异主要出现在罕见的边缘病例中,但如果出现这种情况,则确实很难找到。

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

+0

谢谢@Sulthan,我的问题是关于这里的约定是什么,至于功能上,我敢打赌,我无法设计一个能证明不同之处的例子。 – sramij

约定,如果一个人在任何正式意义上的存在,将是bool/true/falseBOOL/YES/NO

至于功能正确性你是正确的,它很难(但不是不可能的[1])“设法演示一个差异的例子”。 C中的布尔逻辑基于整数,“布尔”值运算符(>,&&,)返回的整数没有任何布尔值。

HTH


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