zoukankan      html  css  js  c++  java
  • [C] zlstdint(让VC、TC等编译器自动兼容C99的整数类型)V1.0。支持Turbo C++ 3等DOS下的编译器

    作者:zyl910

      以前我曾为了让VC++等编译器支持C99的整数类型,便编写了c99int库来智能处理(http://www.cnblogs.com/zyl910/p/c99int_v102.html)。如今为了兼容Turbo C++ 3等DOS下的编译器,做了重大改变,不再适合沿用旧名,于是采用了zlstdint这个新名。


    一、用法简介

      用法很简单——把z_stdint.h、z_inttyp.h这2个文件放到你的项目中,便可以正常的使用C99整数类型及相关的宏了。

      范例代码——

    #define __STDC_LIMIT_MACROS
    #define __STDC_CONSTANT_MACROS
    #define __STDC_FORMAT_MACROS
    
    #include <stdio.h>
    
    #include "z_stdint.h"
    #include "z_inttyp.h"
    
    /// main.
    int main(int argc, char* argv[]) {
        uint8_t i8 = (uint8_t)INT8_C(-1);
        uint16_t i16 = (uint16_t)INT16_C(-1);
        uint32_t i32 = (uint32_t)INT32_C(-1);
    #ifdef INT64_MAX
        uint64_t i64 = (uint64_t)INT64_C(-1);
    #endif
    
    #ifdef INT64_MAX
        printf("stdint:	%" PRIu8 ", %" PRIu16 ", %" PRIu32 ", %" PRIu64 "
    ", i8, i16, i32, i64);
    #else
        printf("stdint:	%" PRIu8 ", %" PRIu16 ", %" PRIu32 "
    ", i8, i16, i32);
    #endif
        return 0;
    }

      由于旧编译器不支持64位整数类型,故根据INT64_MAX宏来判断是否支持。


    二、改动详述

      为了支持Turbo C++ 3等DOS下的编译器,于是精心设计了头文件名,使其符合8.3文件名命名规则。文件名对应关系为——
    z_stdint.h:对应C99标准中的“stdint.h”。
    z_inttyp.h:对应C99标准中的“inttypes.h”。

      用“z_”的前缀表示它用于兼容C标准中的头文件,随后的6个字母是对应头文件的缩写。

      由于Turbo C++ 3等旧编译器不支持64位整数类型,于是zlstdint也做了相应调整——若发现编译器不支持64位整数类型,便不会定义标准64位整数类型(int64_t、uint64_t、int_least64_t……)及相应宏(INT64_MAX、UINT64_MAX……),且intmax_t等最大整数类型被限制为32位。为了检测这种情况,zlstdint提供了Z_STDINT_INTMAX_BIT(intmax_t 类型的位数)宏。

      考虑到自动识别编译器的代码有可能会误判,于是提供了这些配置型宏——
    Z_STDINT_H_USESYS: 是否使用的是编译器提供的 stdint.h .
    Z_INTTYP_H_USESYS: 是否使用的是编译器提供的 inttypes.h .

    三、测试结果

      测试过以下编译器——

    * Virtual C++: 6, 7.1(2003), 8(2005), 9(2008), 10(2010), 11(2012), 12(2013).
    * Turbo C++: Turbo C++ 3, Borland C++ 3.1, C++ Builder 6, C++ Builder XE3 .
    * GCC(Linux): 4.7.0~4.8.2(Fedora 17~20), 4.6.3~4.8.2(Ubuntu 12.04~14.04).
    * GCC(MinGW): 4.6.2(MinGW(20120426)), 4.7.1~4.9.2(TDM-GCC(MinGW-w64)).
    * LLVM GCC: 4.2(Mac OS X Lion 10.7.4), 4.2.1(Mac OS X Mountain Lion 10.8.3).

      例如在DOS下的Turbo C++ 3中编译通过——

    参考文献
    ~~~~~~~~

    《ISO/IEC 9899:1999 (C99)》。ISO/IEC,1999。www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
    《C99标准》。yourtommy。http://blog.csdn.net/yourtommy/article/details/7495033
    《[C/C++] 显示各种C/C++编译器的预定义宏(C11标准、C++11标准、VC、BCB、Intel、GCC)》. http://www.cnblogs.com/zyl910/archive/2012/08/02/printmacro.html
    《[C] 让VC、BCB支持C99的整数类型(stdint.h、inttypes.h)(兼容GCC)》. http://www.cnblogs.com/zyl910/archive/2012/08/08/c99int.html
    《[C] 让VC支持C99的整数类型V1.01。避免包含目录问题,更名auto_stdint.h、auto_inttypes.h(在VC6至VC2012、GCC、BCB等编译器下测试通过)》. http://www.cnblogs.com/zyl910/archive/2013/01/10/c99int_v101.html
    《[C] c99int(让VC等编译器自动兼容C99的整数类型)V1.02。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释》. http://www.cnblogs.com/zyl910/p/c99int_v102.html

    源码下载——
    https://github.com/zyl910/zlstdint

  • 相关阅读:
    ELF BIN HEX[zz]
    电路、信号和PCB设计
    ADHelper中AD属性赋值的修正
    发布一个图片库轮显WebPart
    MOSS的ItemUpdated执行了10次,您碰到了吗?
    InfoPath 保存时自动生成文件名
    最新版WSS3.0 SDK
    自定义MOSS网站的masterpage
    自定义InfoPath数据验证有效性
    (暂时)解决InfoPath一直显示“installing”问题 续
  • 原文地址:https://www.cnblogs.com/zyl910/p/zlstdint_v100.html
Copyright © 2011-2022 走看看