objective-c - 多少()宏 objective-c

标签 objective-c c macros darwin

在使用 Xcode 时,我不小心自动完成了宏 howmany(x,y) 并将其跟踪到 types.h。整行内容如下:

#define howmany(x, y)   __DARWIN_howmany(x, y)  /* # y's == x bits? */

这并没有多大意义,所以我沿着这条路走得更远,在 _fd_def.h 中找到了 __DARWIN_howmany(x, y)。整行内容如下:

#define __DARWIN_howmany(x, y)  ((((x) % (y)) == 0) ? ((x) / (y)) : (((x) / (y)) + 1)) /* # y's == x bits? */

我不知道 __DARWIN_howmany(x, y) 做了什么。该行末尾的注释是否阐明了该宏的预期功能?有人可以解释一下这个宏的作用、它的使用方式以及它在_fd_def.h中的相关性

最佳答案

这是一个相当常用的宏,可以帮助程序员快速回答这个问题,如果我有一些东西,并且我的容器每个可以容纳 y 个,我需要多少个容器来容纳 x 东西?

因此,如果您的容器每个可以容纳 5 个东西,而您有 18 个:

  n = howmany(18, 5);

会告诉您需要四个容器。或者,如果我的缓冲区是按字分配的,但我需要将 n 个字符放入其中,而字的长度为 8 个字符,那么:

  n = howmanu(n, 8);

返回所需的单词数。这种计算在缓冲区分配代码中无处不在。

这是经常计算的:

#define howmany(x, y) (((x)+(y)-1)/(y))

相关的还有 roundup(x, y),它将 x 向上舍入到 y 的下一个倍数:

#define roundup(x, y) (多少(x, y)*(y))

关于objective-c - 多少()宏 objective-c ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23689375/

相关文章:

c - 结构指针有问题

c - strcmp 参数类型错误

c - 发送指向函数的指针

c - 使用 # 和 ## 运算符的嵌套宏实现

ios - NSArray代码未运行

objective-c - DSBezelActivityView 上的内存泄漏

ios - 我可以使用 NSURLSessionUploadTask 进行离线同步任务吗?

ios - 商标 "TM"字符如何显示或转换(非标准)\U0099?

objective-c - 内联函数与宏

c++ - 宏中的 typedef 字符