在我的ObjC代碼中,我調用了一個函數,它有一個參數類型爲bool
(不是BOOL
)的參數。在ObjC中調用C函數,而不是BOOL,從ObjC
我應該通過YES
這個參數從我的ObjC代碼,還是會傳遞true
應該是正確的?
這個問題是關於約定,而不是功能的正確性。
在我的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