edit_note帖子
64
stars积分
2,076
event加入
2011-02-07
电脑网络
[教程]C语言个人进阶【漫天教程】
schedule发表于 2012-03-09 18:45:00
visibility查看 530
chat_bubble回复 1
#1 楼主
争取把自己的一点一滴记下来-
1. 跨平台开发
1) 头文件包含
通过define开关包含不同的库,定义函数类型
#ifndef WIN32
#include “socket_posix.h“
#else /* WIN32 */
#include “socket_win32.h“
#endif /* !WIN32 */
结尾应该注明if适用情况。
2) 替换函数
#undef errno
#define errno WSAGetLastError()
#define read(fd, buf, size) recv(fd, buf, size, 0)
2. 常用宏
今天看到非常漂亮的一个应用:
利用宏##实现了IPv4和IPv6地址信息的初始化
#define FILL_SOCKADDR(AF_INET, sockaddr_in, sin, s, \
host, port, count, addrlen, addrs) \
do \
{ \
struct sockaddr_in *addr; \
int i; \
\
addrlen = sizeof(struct sockaddr_in); \
\
addr = (struct sockaddr_in *) calloc(count, addrlen); \
for (i = 0; i < count; ++i) \
{ \
addr.sin##_family = AF_INET; \
addr.sin##_port = port; \
memcpy(&addr.sin##_addr.s##_addr, \
ADDR(host, i), host->h_length); \
} \
\
addrs = (char *) addr; \
} \
while (0)
#define fill_sockaddr(host, port, count, addrlen, addrs) \
FILL_SOCKADDR(AF_INET, sockaddr_in, sin, s, \
host, port, count, addrlen, addrs)
#ifdef AF_INET6
#define fill_sockaddr6(host, port, count, addrlen, addrs) \
FILL_SOCKADDR(AF_INET6, sockaddr_in6, sin6, s6, \
host, port, count, addrlen, addrs)
#endif /* AF_INET6 */
1. 跨平台开发
1) 头文件包含
通过define开关包含不同的库,定义函数类型
#ifndef WIN32
#include “socket_posix.h“
#else /* WIN32 */
#include “socket_win32.h“
#endif /* !WIN32 */
结尾应该注明if适用情况。
2) 替换函数
#undef errno
#define errno WSAGetLastError()
#define read(fd, buf, size) recv(fd, buf, size, 0)
2. 常用宏
今天看到非常漂亮的一个应用:
利用宏##实现了IPv4和IPv6地址信息的初始化
#define FILL_SOCKADDR(AF_INET, sockaddr_in, sin, s, \
host, port, count, addrlen, addrs) \
do \
{ \
struct sockaddr_in *addr; \
int i; \
\
addrlen = sizeof(struct sockaddr_in); \
\
addr = (struct sockaddr_in *) calloc(count, addrlen); \
for (i = 0; i < count; ++i) \
{ \
addr.sin##_family = AF_INET; \
addr.sin##_port = port; \
memcpy(&addr.sin##_addr.s##_addr, \
ADDR(host, i), host->h_length); \
} \
\
addrs = (char *) addr; \
} \
while (0)
#define fill_sockaddr(host, port, count, addrlen, addrs) \
FILL_SOCKADDR(AF_INET, sockaddr_in, sin, s, \
host, port, count, addrlen, addrs)
#ifdef AF_INET6
#define fill_sockaddr6(host, port, count, addrlen, addrs) \
FILL_SOCKADDR(AF_INET6, sockaddr_in6, sin6, s6, \
host, port, count, addrlen, addrs)
#endif /* AF_INET6 */
全部回复 (1)
2012-03-09 18:50:00
沙发
“nHZ !HS IN”就知道你猜不出,看不懂,还看不出来?你懂拼音吗?你笨也有个限度吧!把手机倒过来看看
登录 后才能回复
flag举报帖子