如果CMSG_ALIGN(i)
是无符号的int变量,那么>=
的值是8的倍数和i
i的最小值是不对的?
#include <stdio.h>
int main(void)
{
int i;
for (i=0; i<50; ++i) {
printf("%d\n", CMSG_ALIGN(i));
}
}
输出我得到:
/* i CMSG_ALIGN(i)
*
* 0 0
* [1,8] 8
* [9,16] 16
*/
答案 0 :(得分:2)
说CMSG_ALIGN(i)的值是最小值是对的 8的倍数和&gt; = i,如果我是无符号的int变量?
没有。在所有平台上,给定值的对齐不一定是8
。如果始终为8
,则根本不需要CMSG_ALIGN()
。
您可能使用的是64位系统。所以它在8字节边界上对齐。但是如果你在32位平台上运行相同的代码,你可能会发现它是一个4字节的对齐。
请注意,CMCG_ALIGN()
会返回size_t
。因此,%zu
是打印size_t
值的正确格式字符串。