zoukankan      html  css  js  c++  java
  • C语言个人进阶

    争取把自己的一点一滴记下来-

    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 */
    
  • 相关阅读:
    linux下安装elasticsearch5.6.3
    linux下安装git
    环境安装备忘录 Zookeeper
    环境安装备忘录 JDK
    环境安装备忘录 Tomcat
    MySql 通过show status 优化数据库性能
    MySQL执行计划解读 转他人文章
    2015年12月21日 my.cnf 配置
    mysql 如何查看my.cnf的 位置
    mysql状态查看 QPS/TPS/缓存命中率查看
  • 原文地址:https://www.cnblogs.com/amaoxiaozhu/p/2380682.html
Copyright © 2011-2022 走看看