我试图创建一个包装 libdnet D编程 语言。这个问题我已经为不知道什么 强调类型eth_addr_t,ip_addr_t,并ip6_addr_t的话 转换 addr。h.最后的神秘类型是sockaddr

我也感兴趣,为什么没一个做,同时循环,总是错误的。

#define addr_pack(addr, type, bits, data, len) do { \
    (addr)->addr_type = type; \
    (addr)->addr_bits = bits; \
    memmove((addr)->addr_data8, (char *)data, len); \
} while (0)

是它需要C执行代码在宏?

有帮助吗?

解决方案

这是C预处理器一个定义宏。在最后的反斜线是因为它是跨多行都是一个定义。一个do while循环,如同和评价外,在年底允许它总是至少执行一次完成while循环。在这种情况下,开发者已经使用了while循环作为一种黑客,让他的代码被放入了自己的范围。

从在同一目录eth.h:

typedef struct eth_addr {
        uint8_t         data[ETH_ADDR_LEN];
} eth_addr_t;

ip.h:

typedef uint32_t        ip_addr_t;

ip6.h:

typedef struct ip6_addr {
        uint8_t         data[IP6_ADDR_LEN];
} ip6_addr_t;

蜜罐-1.1.1 /未使用/ WINSOCK.H:

/*
 * Structure used by kernel to store most
 * addresses.
 */
struct sockaddr {
        u_short sa_family;              /* address family */
        char    sa_data[14];            /* up to 14 bytes of direct address */
};

其他提示

您已经采取了看看 htod ?它应该自动文件转换.H到d声明。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top