什么是eth_addr_t和libdnet中的朋友

时间:2009-05-23 17:52:12

标签: d

我正在尝试为D编程创建libdnet的包装器 语言。我遇到的问题是不知道是什么 为eth_addr_t,ip_addr_t和ip6_addr_t加下划线的类型 转换addr.h。最后一个神秘类型是sockaddr

我也很感兴趣为什么while循环总是假的。

#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是否需要在宏中执行代码?

2 个答案:

答案 0 :(得分:1)

这是c预处理器的定义宏。最后的那些反斜杠是因为它是跨越多行的所有定义。 do while循环就像一个while循环,除了评估在最后完成,允许它总是至少执行一次。在这种情况下,开发人员使用while循环作为一种hack,以允许将代码放入自己的范围。

来自同一目录中的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 */
};

答案 1 :(得分:0)

你看过htod了吗?它应该自动将.h文件转换为d声明。