在使用 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/