题
我试图创建一个包装 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声明。
不隶属于 StackOverflow