在ObjC中调用C函数,而不是BOOL,从ObjC
问题描述:
在我的ObjC代码中,我调用了一个函数,它有一个参数类型为bool
(不是BOOL
)的参数。在ObjC中调用C函数,而不是BOOL,从ObjC
我应该通过YES
这个参数从我的ObjC代码,还是会传递true
应该是正确的?
这个问题是关于约定,而不是功能的正确性。
答
这真的取决于您的构建设置。看到相关的答案Objective-C : BOOL vs bool
BOOL
和bool
可以指相同的类型,但有时它们不会。
为了安全起见,请始终使用正确的类型,即false
和true
,以便bool
。
这种差异主要出现在罕见的边缘病例中,但如果出现这种情况,则确实很难找到。
出于同样的原因,我们在与C API交互时使用NULL
而不是nil
,即使它们通常都只是0
的宏。他们的类型仍然不同。
答
的约定,如果一个人在任何正式意义上的存在,将是bool
/true
/false
和BOOL
/YES
/NO
。
至于功能正确性你是正确的,它很难(但不是不可能的[1])“设法演示一个差异的例子”。 C中的布尔逻辑基于整数,“布尔”值运算符(>
,&&
,等)返回的整数没有任何布尔值。
HTH
[1]例如考虑使用@encode
和不同的平台(macOS,iOS等),如果你想设计一些东西。
谢谢@Sulthan,我的问题是关于这里的约定是什么,至于功能上,我敢打赌,我无法设计一个能证明不同之处的例子。 – sramij