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

问题描述 投票:0回答:2

我从不使用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-长隆

c++ xcode suppress-warnings build-error
2个回答
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字符串(如果找不到该设置,请搜索google图像以获取xcode valid architectures build setting


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.