• 利用宏定义实现C++程序在Unix和Win32环境下的通用性


    【转】

    1.1. 宏定义
    软件的代码,从跨平台的角度来看,可以分为平台相关的和平台无关的。采用C/C++编写的软件,在进行移植时,平台无关的的代码基本上不需要做大的改动,但平台相关的代码需要做很大的调整。这里所说的平台包括操作系统和编译器,为了能够做到让编译器在编译时根据当前的平台状况来自动选择需要编译的代码,我们一般需要用C/C++的编译宏指令来实现。举个例子,下面的一段代码是得到系统当前的时间并且格式化成字符串的操作,注意其中宏指令#ifdef …#else…#endif的使用。这段代码可以在Win32、Linux和大多数Unix平台通过编译:

     

       1: #include <stdio.h>;
       2: #include <time.h>;
       3: #ifdef WIN32
       4: #define LOCALTIME_R(t)  localtime((t))
       5: #define SNPRINTF _snprintf
       6: #else
       7: #define LOCALTIME_R(t)  localtime_r((t), (struct tm *)&tmres)
       8: #define SNPRINTF snprintf
       9: #endif
      10: char * getcurrentdate(char *buffer, unsigned int buflen)
      11: {
      12:   if (buffer)
      13:   {
      14:     struct tm *tmnow;
      15:     time_t long_time;
      16:     time(&long_time );                     /* Get time as long integer. */
      17:     tmNow = LOCALTIME_R( &long_time );  /* Convert to local time.     */
      18:     SNPRINTF(buffer, buflen, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d",
      19:       tmnow ->;tm_year+1900, tmnow ->;tm_mon + 1, tmnow ->;tm_mday,
      20:       tmnow ->;tm_hour, tmnow ->;tm_min, tmnow ->;tm_sec);
      21:   }
      22:   return buffer;
      23: }

    研究一下上面的代码我们可以发现,由于一些库函数是非ANSI标准的,平台间有些差异,比如获得格式化字符串的函数在Win32平台叫_snprintf,而在Unix/Linux平台叫snprintf,它们之间的差别不是太大,通过使用编译宏指令就可以区分。

  • 相关阅读:
    [转载] c++ cout 格式化输出浮点数、整数及格方法
    [转]
    _jobdu_1001
    关于网页授权的两种scope的区别说明
    CentOS编译安装Python3
    Apache+OpenSSL实现证书服务器提供HTTPS
    Linux下安装Tomcat服务器和部署Web应用
    记一次肉机事件--yam
    通过关闭 UseDNS和GSSAPIAuthentication选项加速 SSH登录
    Git 系列之tag的用法---为你的代码标记版本号
  • 原文地址:https://www.cnblogs.com/shawnpoo/p/3317802.html
Copyright © 2020-2023  润新知