我如何摆脱这些警告?

时间:2010-04-22 15:25:19

标签: c++ c xcode macos warnings

这确实是几个问题,但无论如何......

我正在使用XCode中的一个大项目,最近从MetroWorks移植(是的,真的),并且有一些我想要摆脱的警告。每隔一段时间就会出现一个重要警告,但我从不看它们,因为有太多的垃圾。所以,如果我能弄清楚如何让XCode停止发出警告,或者实际解决问题,那就太好了。以下是警告:

  • 它声称<map.h>已过时。 但是,当我用<map>替换它时 我的文件没有编译。显然, map.h中有些东西不是 在地图......
  • 此十进制常数仅在ISO C90中无符号 与无符号长整数相比,这是一个很大的数字。我甚至投了它,没有效果。
  • 条件表达式中的数字不匹配:<anonymous enum> vs <anonymous enum>
    这似乎来自?:运算符。可能那个then和else分支不能评估到相同的类型?除了在至少一个案例中,它是 (matchVp == NULL ? noErr : dupFNErr)

    因为它们都是OSErr类型,这是mac定义的......我不确定是什么。当我有其他几对mac常量时,它似乎也出现了......

  • 多字符字符常量

    这个很明显。问题是我实际上需要多字符常量...

  • -fwritable-strings与文字CF / NSString

    不兼容

    我在项目和目标设置中取消选中“Strings are Read-only”框...而且似乎没有效果......

4 个答案:

答案 0 :(得分:3)

<map.h>中的项目位于全局命名空间中,而<map>中的项目位于std命名空间中。您很可能只是直接引用全球版本,当您切换到<map>时,您不再看到它们,因为它们已移至std::。在源文件中添加using namespace std以快速继续。在标题中,您需要使用std::限定地图相关项的使用。

我认为您需要使用尾随UL来限定文字常量值,以便它知道文字的正确类型。

很可能这些枚举是在两个独立的操作系统定义的匿名枚举中。你可以static_cast它们来安静警告。

不知道多字节字符。

你能禁用-fwritable-strings吗?你能重构需要修改常量字符串的代码吗?

答案 1 :(得分:3)

  

“多字符字符常量”
  这一点很明显。问题是我实际上需要多字符常量......

-Wno-multichar编译 - 将其添加到其他警告标志,并关闭四字符文字警告。

当然,这个遗留代码的多字符字符常量是否实际上意味着与他们在Metrowerks下可能在不同架构上所做的一样......是一个悬而未决的问题。

答案 2 :(得分:1)

该十进制常量的写法类似于3111222333UL

答案 3 :(得分:0)

我发现至少从Xcode 3.2.4开始,你可以通过在常量中使用一些正确长度的字符来消除警告。

例如,我有一个常量只有3个字符'TT2',它给了我多字符字符常量错误。将0添加到常量会使错误消失,如下所示:'\ 0TT2'。