c/c++语言开发共享C语言个人进阶

争取把自己的一点一滴记下来- 1. 跨平台开发 1) 头文件包含 通过define开关包含不同的库,定义函数类型 #ifndef win32 #include &quot

争取把自己的一点一滴记下来-
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[i].sin##_family = af_inet;                      
          addr[i].sin##_port = port;                           
          memcpy(&addr[i].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 */
 

摘自 阿毛小猪
 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/603912.html

(0)
上一篇 2021年5月12日
下一篇 2021年5月12日

精彩推荐