2011-06-13 773 views
11

當使用JNI在Java和C之間進行接口時,javah將Java中的布爾值解析爲JNI頭文件中的jBoolean。當我在C文件中使用bool,在Visual Studio編譯器會拋出一個警告,將變量從jBoolean轉換爲bool的類型

警告C4800:'jboolean:強制值bool '真' 或 '假'(性能警告)

是否有任何其他數據類型應該使用?或者如果bool是這裏唯一的數據類型,那麼我可能面臨的性能問題到底是什麼?

回答

10

「性能問題」是演員陣容不完全自由。鑄造到bool基本上意味着強制所有非零值到1,這需要一點點代碼,而不是像「自由」類型轉換,如charint。 「性能問題」是一些額外的機器說明。如果你在一個緊密的循環中這樣做了一百萬次,好吧,也許你在乎 - 否則,不,你根本不應該在意。這是IMO的一個愚蠢的編譯器警告;這個小額外的成本只是使用bool時所做出的妥協的一部分,編譯器不應該爲此煩惱。

3

嘗試將其轉換爲BOOL。你也許會發現這個帖子也很有趣:Difference between bool and BOOL

但我不太確定這是你在找什麼。 BOOL是16位,而不是8位。如果沒關係,那麼它比bool更接近你所尋找的。否則,你可以使用字節。請注意,如果您最終投射到其中任何一個,您將無法再執行== true。這也在我提供的鏈接中解釋。

相關問題