跨平台C/C++数据类型定义

您所在的位置:网站首页 变量类型int32 跨平台C/C++数据类型定义

跨平台C/C++数据类型定义

2023-09-18 08:20| 来源: 网络整理| 查看: 265

1       需考虑问题 1.1    编译器运行操作系统

l        WINDOWS :  _WIN32、WIN32;

l        UNIX/LINUX:  unix、__unix、__unix__; 

l        SunOS/SOLARIS: __SVR4、__svr4__、sun、__sun、__sun__、sparc、__sparc、__sparc__; 

l        HPUX: __hppa、__hppa__、__hpux、__hpux__、_HPUX_SOURCE; 

l        AIX: _AIX、_AIX32、_AIX41、_AIX43、_AIX51、_AIX52; 

l        LINUX: linux、__linux、__linux__、__gnu_linux__;

l        CPU: __x86_64、__x86_64__(Intel); __amd64、__amd64__(AMD); sparc、  __sparc、__sparc__;

 1.2    编译器信息

l        __STDC__: ANSI C标志,值为1,说明兼容ANSI C标准;

l        __GNUC__: GCC编译器编预定义宏;__GNUC__的值表示GCC版本号;

l        __GNUC_MINOR__: GCC次版本号;

l        __GNUC_PATCHLEVEL__: GCC编译器修订版本号,l    

l        __GLIBC_MINOR__: glib的次版本号;

l        VC++的版本宏:

l           Visual Studio 5.0  --> VC++5.0 _MSC_VER = 1100

l           Visual Studio 6.0  --> VC++6.0 _MSC_VER = 1200

l           Visual Studio 2002 --> VC++7.0 _MSC_VER = 1300

l           Visual Studio 2003 --> VC++7.1 _MSC_VER = 1310

l           Visual Studio 2005 --> VC++8.0 _MSC_VER = 1400

l           Visual Studio 2008 --> VC++9.0 _MSC_VER = 1500

1.3    ISO C 标准 1.3.1  

char,int,short int,long,long long 限制性说明头文件。定义了char,int,short,long,long long 最大值最小值等。如表一所示。

                                                                     表一  定义

Name

Description

  Typical value

 

CHAR_BIT

Number of bits in a char

8    

≥+8

SCHAR_MIN

 Minimum value for a signed char

–128

≤–127

SCHAR_MAX

Maximum value for a signed char

+127

≥+127

UCHAR_MAX

Maximum value for an unsigned char

 

≥+255

CHAR_MIN

Minimum value for a char

–128

≤–127

(if char is represented as a signed char; otherwise ≤0)

CHAR_MAX

Maximum value for a char

+127

≥+127 (if char is represented as a signed char; otherwise ≥+255)

MB_LEN_MAX

Maximum multi byte length

of a character across all locales

varies, usually at least 4

≥+1

SHRT_MIN

Minimum value for a short int

–32,768

≤–32,767

SHRT_MAX

Maximum value for a short int

+32,767

≥+32,767

USHRT_MAX

Maximum value for an unsigned short int

+65,535

≥+65,535

INT_MIN

Minimum value for an int

–2,147,483,648

≤–32,767

INT_MAX

Maximum value for an int

+2,147,483,647

≥+32,767

UINT_MAX

Maximum value for anunsigned int

+4,294,967,295

≥+65,535

LONG_MIN

Minimum value for a long int

32 bit compiler

–2,147,483,648

≤–2,147,483,647

64 bit compiler

–9,223,372,036,854,775,808

LONG_MAX

Maximum value for a long int

32 bit compiler

+2,147,483,647

≥+2,147,483,647

64 bit compiler

+9,223,372,036,854,775,807

ULONG_MAX

Maximum value for an unsigned long int

32 bit compiler

+4,294,967,295

≥+4,294,967,295

64 bit compiler

+18,446,744,073,709,551,615

LLONG_MIN

Minimum value for a long long int

–9,223,372,036,854,775,808

≤-9,223,372,036,854,775,807

LLONG_MAX

Maximum value for a long long int

+9,223,372,036,854,775,807

≥+9,223,372,036,854,775,807

ULLONG_MAX

Maximum value for an unsigned long long int

+18,446,744,073,709,551,615

≥+18,446,744,073,709,551,615

1.3.2   常用类型说明

l         char:typical 8-bits,Many DSP may define a char-bits equal to 16 bits or more.

l         short:typical 16-bits

l         int:typical 16-bits or 32-bits, bits-number of int must be more than short.

l         long:typical 32-bits,also larger than int

l         long long:typical 64-bits

2       数据类型定义

//        // TOD:  filename:   types.h // 1.Using this head file for data-type defining, //   Firstly make sure the type is defined // 2.Example //   1.Define a 8-bits variable : INT8 chVariable; //   2.Define a 16-bits variable: INT16 snVariable; //   3.Define a 32-bits variable: INT32 nVariable; //   4.Define a 64-bits variable: INT64 llVariable; //

// //C Standards // #if defined(__STDC__) # define PREDEF_STANDARD_C_1989 # if defined(__STDC_VERSION__) #  define PREDEF_STANDARD_C_1990 #  if (__STDC_VERSION__ >= 199409L) #   define PREDEF_STANDARD_C_1994 #  endif #  if (__STDC_VERSION__ >= 199901L) #   define PREDEF_STANDARD_C_1999 #  endif # endif #endif

// // Pre-C89 compilers do not recognize certain keywords.  // Let the preprocessor remove those keywords for those compilers. // #if !defined(PREDEF_STANDARD_C_1989) && !defined(__cplusplus) # define const # define volatile #endif

// // Define 8-bits Integer, 16-bits Integer,32-bits Integer // All compliant compilers that support Standard C/C++ // VC++, Borland C++, Turb C++  those who support C89,but undefined __STDC__)  // #if defined(__STDC__) || defined(__cplusplus) || defined(_MSC_VER) || defined(__BORLANDC__) ||  defined(__TURBOC__) #include  // Defined 8 - bit Integer  #if defined(UCHAR_MAX) && (UCHAR_MAX == 0xFF)   typedef  char  INT8, *INT8_PTR;    typedef  unsigned char UINT8, *INT8_PTR;         #ifndef DEFINED_INT8    #define DEFINED_INT8   #endif  #endif  // Defined 16-bits Integer  #if defined(USHRT_MAX) && (USHRT_MAX == 0xFFFF)   typedef  short int  INT16, *INT16_PTR;   typedef  unsigned short int UINT16, *UINT16_PTR;   #ifndef DEFINED_INT16   #define DEFINED_INT16   #endif  #elif defined(UINT_MAX) && (UINT_MAX == 0xFFFF)   typedef  int  INT16, *INT16_PTR;   typedef  unsigned int UINT16, *UINT16_PTR;   #ifndef DEFINED_INT16   #define DEFINED_INT16   #endif   #endif  // Defined 32-bits Integer  #if defined(UINT_MAX) && (UINT_MAX == 0xFFFFFFFFUL)   typedef int  INT32, *INT32_PTR;   typedef unsigned int UINT32, *UINT32_PTR;   #ifndef DEFINED_INT32   #define DEFINED_INT32   #endif  #elif defined(ULONG_MAX) && (ULONG_MAX == 0xFFFFFFFFUL)   typedef long int  INT32, *INT32_PTR;   typedef unsigned long int UINT32, *UINT32_PTR;   #ifndef DEFINED_INT32   #define DEFINED_INT32   #endif  #endif #endif

// // Define 64-bits Integer // Here Only support typical systems  // such as GNU/Linux Windows UNIX Vxworks  BSD Solaris  //

// GNU/Linux System 64-bits Integer #if defined(__GNUC__) || defined(linux) ||defined(__linux)  #if defined (__GLIBC_HAVE_LONG_LONG) || (defined(ULLONG_MAX) && (ULLONG_MAX == 0xFFFFFFFFFFFFFFFFUL))   typedef  long long INT64, *INT64_PTR;   typedef  unsigned long long UINT64, *INT64_PTR;   #ifndef DEFINE_INT64   #define DEFINE_INT64   #endif  #endif #endif

// Windows System 64-bits Integer #if defined (WIN32) || defined (_WIN32)  #if defined(_MSC_VER) || defined(__BORLANDC__)   typedef __int64 INT64, *INT64_PTR;   typedef unsigned __int64 UINT64, *INT64_PTR;   #ifndef DEFINE_INT64   #define DEFINE_INT64   #endif    #else   typedef unsigned long long INT64, *INT64_PTR;   typedef signed long long UINT64, *INT64_PTR;   #ifndef DEFINE_INT64   #define DEFINE_INT64   #endif  #endif #endif

// UNIX  #if defined(unix) || defined(__unix__) || defined(__unix)  # define PREDEF_PLATFORM_UNIX #endif #if defined(PREDEF_PLATFORM_UNIX)  #include  #if defined(_XOPEN_VERSION)   #if (_XOPEN_VERSION >= 3)    #define PREDEF_STANDARD_XOPEN_1989   #endif         #if (_XOPEN_VERSION >= 4)    #define PREDEF_STANDARD_XOPEN_1992   #endif   #if (_XOPEN_VERSION >= 4) && defined(_XOPEN_UNIX)    #define PREDEF_STANDARD_XOPEN_1995   #endif   #if (_XOPEN_VERSION >= 500)    #define PREDEF_STANDARD_XOPEN_1998   #endif   #if (_XOPEN_VERSION >= 600)   #define PREDEF_STANDARD_XOPEN_2003    typedef unsigned long long INT64, *INT64_PTR;    typedef signed long long UINT64, *INT64_PTR;    #ifndef DEFINE_INT64    #define DEFINE_INT64    #endif   #endif  # endif #endif



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3