针对 arm64 和 32 位架构进行编译时的基础类型

2024-04-04

在为 arm64 编译 iOS 应用程序的代码时,我遇到了一个有趣的问题,该问题与自定义 Foundation 类型的不同基本类型有关。假设我想 printf (或 stringWithFormat) 声明为的数字NSU整数

[NSString stringWithFormat:@"%u", _depth,

这将产生一个针对arm64编译的警告,因为NSUInteger对于arm64声明为unsigned long。因此,我应该用“%lu”替换“%u”,但现在在编译armv7架构时这变得无效,因为对于32位架构NSUInteger声明为unsigned int。 我知道警告说“NSUInteger 不应用作格式参数”,所以我们继续讨论浮动:

typedef CGFLOAT_TYPE CGFloat;

在 64 位上CGFLOAT_TYPE is double,而在 32 位上则是float。因此,做这样的事情:

- (void)foo:(CGFloat)value;

and then

[self foo:10.0f]; 
[self foo:10.0]; 

针对两种架构进行编译时仍然会产生警告。在 32 位架构上,第二个调用不正确(从 double 转换为 float),在 64 位架构上,第一个调用将 float 转换为 double(这是可以的,但仍然不好)。

很想听听您对这个问题的想法。


我见过的一种(诚然很糟糕)方法是使用魔法#define和编译时字符串文字连接。像这样:

// In your prefix header or something
#if __LP64__
#define NSI "ld"
#define NSU "lu"
#else
#define NSI "d"
#define NSU "u"
#endif

// Then later you can use these like this...
NSString* foo = [NSString stringWithFormat:@"%"NSU" things in the array.", array.count]);

非常可怕,但它有效。

另一种看似更常见的方法是简单地将每个平台上的值向上转换为更大的类型,如下所示:

NSString* foo = [NSString stringWithFormat:@"%lu things in the array.", (unsigned long)array.count]);

最近(即自从新的拳击速记语法出现以来)我发现自己很懒并且开始只对所有内容进行拳击,如下所示:

NSString* foo = [NSString stringWithFormat:@"%@ things in the array.", @(array.count)]);

可能有更好的方法,但这些是我见过最多的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

针对 arm64 和 32 位架构进行编译时的基础类型 的相关文章

  • 为什么下面的重叠比较总是评估为 true

    我不明白为什么以下代码有警告 指出重叠比较始终评估为真 接下来的语句永远不会被执行 QVariant MainModel data const QModelIndex index int role const if index isVali
  • 在 T4 代码生成中,如何从引用的程序集中获取类型?

    由于 T4 在项目上下文之外运行 因此我无权访问当前程序集或其他程序集 如何注册对引用程序集的访问 然后从中获取类型 我猜您想访问项目中建筑物的程序集 我在下面的示例代码中所做的是将一个名为 TestLib 的项目添加到我的解决方案中 我将
  • 仅针对某些异常类型中断

    我知道异常处理是一件非常重要的事情 我们在所有项目中都在这样做 主要原因是记录客户发生的错误 这工作正常 根本不是问题 但是 当我仍在使用 Visual Studio 编码和运行应用程序时 我根本不需要任何异常处理 我希望调试器正好停在应用
  • 使用正则表达式解析日志文件

    我目前正在为我们的内部日志文件 由 log4php log4net 和 log4j 生成 开发一个解析器 到目前为止 我有一个很好的正则表达式来解析日志 除了一个烦人的一点 一些日志消息跨越多行 我无法正确匹配 我现在的正则表达式是这样的
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • NSFetchedResultsController 中的部分名称与托管对象值不匹配

    我正在使用 NSFetchedResultsController 用大约 1500 个实体的中等大小的核心数据存储的结果填充 UITableView 结果控制器相当标准 一些潜在错误的 热点 并不适合此设置 在与其使用的同一 主 线程上创建
  • 动态框架中未定义的架构符号

    我正在开发一个 iOS 框架 该框架包含多个第三方框架并使用 UnitySendMessage C 方法与 Unity 进行通信 我想创建一个动态框架 支持 iOS8 但我偶然发现以下编译错误 Undefined symbols for a
  • C# 中不区分大小写的替换不使用正则表达式?

    有没有一种方法可以在不使用 C 中的正则表达式的情况下对字符串进行不区分大小写的替换 像这样的东西 string x Hello x x Replace hello hello world 你可以尝试类似的东西 string str Hel
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • 动画导航控制器“后退”按钮

    我在导航控制器层次结构中的视图控制器上有一个自定义按钮 按下该按钮时 会弹出可见的视图控制器 我想使用 UIView 的transform属性来动画关闭视图控制器 它有效 但如果我使用 popViewControllerAnimated Y
  • Bazel:将编译标志添加到默认 C++ 工具链

    我想向默认的 C 工具链添加一些编译器和链接器标志 以便我构建的所有目标 本地或导入 共享它们 我知道可以定义我自己的工具链 但我不想这样做 因为它非常复杂且容易出错 理想情况下我想要这样的东西 cc toolchain cc defaul
  • C++ 更改屏幕方向问题 -- DEVMODE dmDisplayOrientation DMDO_90 undefined

    我似乎无法编译一些 C 代码 我正在翻转显示器的方向 但 VS2008 告诉我 DMDO 90 和 DMDO 270 无法识别 error C2065 DMDO 90 undeclared identifier error C2065 DM
  • 我应该使用 Helgrind 还是 DRD 进行线程错误检测?

    好像Valgrind http valgrind org docs manual manual html有两个工具都可以进行线程错误检测 Helgrind http valgrind org docs manual hg manual ht
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • 将对象映射到 TableView 部分的 Swift 二维数组

    我想不出更好的方法来做到这一点 我将学生对象的所有属性映射到二维数组中 所以我的电视有几个部分 我也不能使用静态表视图 如果是这样 这个问题就不会存在 所以我在 TVC 中的代码 let currentUser PFUser current
  • 如何在RcppParallel中调用用户定义的函数?

    受到文章的启发http gallery rcpp org articles parallel distance matrix http gallery rcpp org articles parallel distance matrix 我
  • 在 C++ 中什么时候首选传递指针而不是引用传递?

    我可以想象一种情况 其中输入参数可以为 NULL 以便首选传递指针而不是传递引用 有人可以添加更多案例吗 在传递的对象实际上将被修改的情况下 有些人更喜欢传递指针 当对象通过引用传递时 它们使用 pass by const referenc
  • 如何编写完全可移植的 4 字节字符常量的编译时初始化

    遗留 代码大致如下所示 define MAKEID a b c d UInt32 a lt lt 24 UInt32 b lt lt 16 UInt32 c lt lt 8 UInt32 d define ID FORM MAKEID F
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include
  • C#“var”关键字在 VB.NET 中的等价物是什么?

    例如 我如何获得 VB NET静态类型局部变量是static赋值右侧的表达式的类型 像这样 Dim http msdn microsoft com en us library 7ee5a7s1 aspx我的变量 3 你还需要 选项推断 ht

随机推荐

  • 在 CentOS 上安装 M2Crypto

    我正在尝试通过从源代码编译来在 CentOS 上安装 M2Crypto 我正在做一个 python setup py 构建 但我收到以下错误 usr local lib python2 6 distutils dist py 266 Use
  • 在 Swift 中将对象写入 CSV 时如何处理逗号?

    关于堆栈溢出似乎还有其他答案 但没有任何特定于 swift 的答案 我正在从包含 3 个属性的站点对象生成 CSV Struct SiteDetails var siteName String var siteType String var
  • 用于谷歌存储的静态网站的 Terraform 谷歌存储桶 - 403

    尝试为静态网站创建一个谷歌存储桶 provider google project myprojectname 123 credentials file storage admin json region us central1 zone u
  • 造成这种性能下降的原因是什么?如何调查它?

    Context 我正在使用 NEON SIMD 指令为 ARM64 编写一些高性能代码 我正在尝试进一步优化 我只使用整数运算 不使用浮点数 此代码完全受 CPU 或内存限制 它不执行任何类型的系统调用或 I O 文件系统 网络或其他任何内
  • LINQ to Entities 无法识别方法“System.Web.Mvc.FileResult”

    我试图用他们的图像显示多个用户名所以 我有一个像这样的 Json 操作方法 public JsonResult GetUsers var ret from user in db Users orderby user UserName sel
  • 每次 RxSwift 中 UITextField 文本属性更改时如何获取信号

    如何从以编程方式对 UITextField 文本属性进行的更改中获取信号 通过使用 rx text 仅当用户通过键盘输入文本时报告信号 如果您以编程方式设置 textField text 则信号不会触发 这就是我使用 rx text 的方式
  • 如何将 3D 点云导出为渲染的体素网格?

    我有一个由几个彩色体素组成的场景 当在 meshlab 中打开它时 所有点都被绘制为二维正方形 是否可以在网格实验室中渲染一个场景 其中正方形被 3D 立方体替换 并具有额外的闪电 反射率 这是我到目前为止得到的 我宁愿想要这样的东西 我为
  • 使用 protobuf 作为文本配置文件

    我最近遇到一个非常大的关键任务项目 其中所有配置 文件是使用文本 protobuf 定义来定义的 配置文件的意思是 人类可读和可编辑 例如 message ServerSettings required int32 port 3022 op
  • Coldfusion 中的字符串“00”等于“.0”?还有什么?

    所以我注意到 ColdFusion 回来了true对于条件 00 0 这可以在 CF 9 1 和 CF 10 中重现 我可以通过添加一个轻松解决这个问题find foo 条件 但这不正常 这样的事情让我对 ColdFusion 产生了怀疑
  • 使用 itextsharp 勾选 pdf 复选框

    我尝试了很多不同的方法 但我无法选中该复选框 这是我尝试过的 var reader new iTextSharp text pdf PdfReader originalFormLocation using var stamper new i
  • 在 mysql 中导出和导入 utf8 数据:最佳实践

    我们经常需要将数据文件发送给我们的一位客户 其中包含他 她需要翻译的数据库中的数据 大多数情况下 此导出为 CSV 或 XLS 大多数时候 我们使用 phpmyadmin 创建 csv 转储 并获得包含翻译数据的 xls 文件 问题是 大多
  • 在 r2017b 中使用 C++ 中的 startMATLAB 和“MatlabEngine.hpp”发出问题

    在新版本 2017b 中 Matlab 发布了新的 C MATLAB 引擎 API https fr mathworks com help matlab calling matlab engine from cpp programs htm
  • $(form).ajaxSubmit 不是函数

    我正在尝试使用 jquery 验证插件来验证表单并使用 ajax 请求提交内容 这段代码位于我的文档的头部 document ready function contact form validate submitHandler functi
  • 从命令行查找并替换多行文本

    我正在尝试使用还执行其他操作的脚本编辑配置文件 该脚本需要找到某些连续的文本行并将其删除 它需要在适当的位置粘贴一个新配置 该新配置从旧配置所在的同一行开始 在新旧配置中 空间的使用都很重要 在 configfile php 中 此文本块
  • 如何在开源(Github + Heroku)应用程序中保护 Google API 密钥

    我正在创建一个应用程序 希望在未来几周内开源 源代码位于 Github 上 如果通过了 Travis CI 测试 Heroku 会在有新提交时自动部署代码 在此应用程序中 我有几个 API 密钥 通过在我的 heroku dynos 中使用
  • 将 2 元素数组的数组转换为散列,其中重复的键附加附加值

    例如 给定一个数组 array a b a c c b 返回以下哈希 hash a gt b c c gt b hash Hash array 覆盖以前的关联 产生 hash a gt c c gt b 使用功能性婴儿步骤 irb 01 0
  • 未填充方块的 Matplotlib 散点图

    我想制作一个带有未填充方块的散点图 markerfacecolor不是一个被认可的选项scatter https matplotlib org devdocs api as gen matplotlib pyplot scatter htm
  • 如何让应用程序兼容所有Android手机?

    请帮助我解决我的问题 在我的大多数应用程序中 Ui 设计并不兼容所有 Android 设备 即 所有小部件在所有手机中都没有按正确的顺序对齐 我想开发一个应用程序应该适合所有手机尺寸和分辨率 大手机 普通手机和小手机 请解决这个问题 提前致
  • 使用 jQuery 绘制饼图

    我想用 JavaScript 创建一个饼图 在搜索中我发现了 Google Charts API 由于我们使用的是 jQuery 我发现有Google 图表的 jQuery 集成 http www maxb net scripts jgch
  • 针对 arm64 和 32 位架构进行编译时的基础类型

    在为 arm64 编译 iOS 应用程序的代码时 我遇到了一个有趣的问题 该问题与自定义 Foundation 类型的不同基本类型有关 假设我想 printf 或 stringWithFormat 声明为的数字NSU整数 NSString