什么是CMSG_ALIGN宏的价值

时间:2016-01-08 10:39:38

标签: c linux sockets

如果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
 */

1 个答案:

答案 0 :(得分:2)

  

说CMSG_ALIGN(i)的值是最小值是对的   8的倍数和&gt; = i,如果我是无符号的int变量?

没有。在所有平台上,给定值的对齐不一定是8。如果始终为8,则根本不需要CMSG_ALIGN()

您可能使用的是64位系统。所以它在8字节边界上对齐。但是如果你在32位平台上运行相同的代码,你可能会发现它是一个4字节的对齐。

请注意,CMCG_ALIGN()会返回size_t。因此,%zu是打印size_t值的正确格式字符串。