2010-08-14 67 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

这种类型的铸造是一种丑陋的,但它是处理这些类型不匹配的最普通的方法。一些编译器提供了其他方法来消除这些警告,但将它们关闭是一个糟糕的主意,因为它们有时非常重要。演员承认不同之处,并确保你考虑过任何可能的后果。

想想后果。如果你只是不假思索投事情都可能严重错误。但你不这样做,它似乎并没有。)