2010-08-14 64 views
2

我發現自己鑄造退貨類型很多,以沉默編譯器警告,它總是讓我覺得我做錯了什麼。有關鑄造基本退貨類型的快速提問

這個例子是Objective-C的

const char *strBuf = [anNString UTF8String]; 
[anOutputStream write:strBufr maxLength:len]; 

這goves我一個編譯器警告作爲 -UTF8String返回const char *和-write:最大長度:需要const uint8_t *

所以,明知沒有更好的,我通常會增加演員們停止嘮叨,繼續我的快樂之路。

這是不好的風格(就我而言),還是隻是它的方式?

我感謝您的任何想法或建議。

回答

0

沒有辦法解決這個問題。 C,C++和Objective-C是強類型語言。所以,只要有類型轉換,你就會得到一個編譯器警告。唯一的方法是使用並非總是可行的相同類型。這是典型的。我會繼續做你在做的事情。不要忽略警告或將其關閉,因爲會有一種類型轉換,這將是您想要修復的錯誤。如果你關掉警告,你會讓自己容易陷入一個很難找到的bug。

+0

感謝zooropa。我確實很看重編譯器的警告,並且通常更喜歡C更寬容,鬆散類型的語言,我想這就是爲什麼我覺得經常試圖繞過警告是錯誤的。 – hooleyhoop 2010-08-14 13:02:16

0

這種類型的鑄造是一種醜陋的,但它是處理這些類型不匹配的最普通的方法。一些編譯器提供了其他方法來消除這些警告,但將它們關閉是一個糟糕的主意,因爲它們有時非常重要。演員承認不同之處,並確保你考慮過任何可能的後果。

想想後果。如果你只是不假思索投事情都可能嚴重錯誤。但你不這樣做,它似乎並沒有。)