xcode构建错误:从指针转换为较小类型“int”的语义问题会丢失信息

时间:2014-09-09 13:07:04

标签: c++ xcode suppress-warnings build-error

我从不使用mac或xcode,但我现在需要为osx和ios构建一个C ++库。 C ++代码可以很好地为windows和android构建,但是在xcode中我得到了数百个这些红色的激励标记图标,表明了这一点:

 Semantic issue
 cast from pointer to smaller type
'int' loses information

以下是表示此错误的一行代码示例

    fixturesArray.push_back((int)fixture->GetUserData());

我已经在使用未使用的变量构建了一个问题,我删除了一个标志-Werror,这解决了这一特定问题。我能为这个问题做些什么吗?我假设问题是警告被视为错误。 这里还有其他标志......

-Wall  -Wno-long-long -Wno-variadic-macros     -DNDEBUG -DDEBUG=0   

更新:该错误只有大约10个左右(其他100个事情都是警告)如果我改变了' int'到' int64'在所有这些情况下,我可以建立。但是我不想这样做,我确定它会导致问题,而不是程序应该如何工作。

UPDATE2:同样保留代码,只需删除这些标志即可构建      -Wno - 长 - 长

2 个答案:

答案 0 :(得分:1)

此代码适用于windows,因为visual studio默认会创建32位二进制文​​件,而android是一个32位平台。在这些平台中,指针是32位,int也是32位,因此可以将指针存储在int类型的向量或变量中。

如果您定位Mac OS X,Xcode默认会构建64位和32位二进制文​​件,并且您收到的警告实际上是告诉您在64位平台上将指针放在int内变量不是一个好主意,因为指针值的一半会丢失,并且您以后无法将其检索回来。

您可以在案例中追逐两种不同的解决方案:

  • 修复代码,将int更改为size_t并修复因此而停止工作的任何内容。
  • 决定您不想修复它,以免您支持64位平台。

在第二种情况下,您可以通过更改xcode上的某些选项来禁用构建64位二进制文​​件并仅在mac os上使用32位二进制文​​件。为此,请从"有效架构中删除x86_64字符串"设置目标"构建设置" (如果您无法找到该设置,请搜索谷歌图片xcode valid architectures build setting

答案 1 :(得分:0)

好吧,似乎GetUserData()返回一个指针。这似乎有一个sizeof(void*) > sizeof(int),所以铸造削减了一些东西

编辑:如果它适用于int64,这证实了我的假设(你似乎坐在64位机器前面)。我不确定你要做什么,但是对整数的指针是一个坏主意。我建议你让fixturesArray成为一个合适的值类型的容器,如果你想让它更独立于架构工作。