标准C语言实现整型数据的机器无关,编译器无关

在C语言中数据类型的长度,有无符号等常常是机器相关,编译器相关的。

比如说:int在32位机上长度是32位,但是在51单片机上长度是16位。

本程序用宏实现了标准C语言整型数据的机器无关,编译器无关。

/* Int.h */

#ifndef INT_H

#define INT_H

#include <limits.h>

#if 0XFF == UCHAR_MAX

typedef signed char SInt8;

typedef unsigned char UInt8;

#elif 0XFF == USHRT_MAX

typedef signed short SInt8;

typedef unsigned short UInt8;

#elif 0XFF == UINT_MAX

typedef signed int SInt8;

typedef unsigned int UInt8;

#elif 0XFF == ULONG_MAX

typedef signed long SInt8;

typedef unsigned long UInt8;

#else

#ifdef ULLONG_MAX

#if 0XFF == ULLONG_MAX

typedef signed long long SInt8;

typedef unsigned long long UInt8;

#endif

#endif

#endif

#if 0XFFFF == UCHAR_MAX

typedef signed char SInt16;

typedef unsigned char UInt16;

#elif 0XFFFF == USHRT_MAX

typedef signed short SInt16;

typedef unsigned short UInt16;

#elif 0XFFFF == UINT_MAX

typedef signed int SInt16;

typedef unsigned int UInt16;

#elif 0XFFFF == ULONG_MAX

typedef signed long SInt16;

typedef unsigned long UInt16;

#else

#ifdef ULLONG_MAX

#if 0XFFFF == ULLONG_MAX

typedef signed long long SInt16;

typedef unsigned long long UInt16;

#endif

#endif

#endif

#if 0XFFFFFFFF == UCHAR_MAX

typedef signed char SInt32;

typedef unsigned char UInt32;

#elif 0XFFFFFFFF == USHRT_MAX

typedef signed short SInt32;

typedef unsigned short UInt32;

#elif 0XFFFFFFFF == UINT_MAX

typedef signed int SInt32;

typedef unsigned int UInt32;

#elif 0XFFFFFFFF == ULONG_MAX

typedef signed long SInt32;

typedef unsigned long UInt32;

#else

#ifdef ULLONG_MAX

#if 0XFFFFFFFF == ULLONG_MAX

typedef signed long long SInt32;

typedef unsigned long long UInt32;

#endif

#endif

#endif

#if 0XFFFFFFFFFFFFFFFF == UCHAR_MAX

typedef signed char SInt64;

typedef unsigned char UInt64;

#elif 0XFFFFFFFFFFFFFFFF == USHRT_MAX

typedef signed short SInt64;

typedef unsigned short UInt64;

#elif 0XFFFFFFFFFFFFFFFF == UINT_MAX

typedef signed int SInt64;

typedef unsigned int UInt64;

#elif 0XFFFFFFFFFFFFFFFF == ULONG_MAX

typedef signed long SInt64;

typedef unsigned long UInt64;

#else

#ifdef ULLONG_MAX

#if 0XFFFFFFFFFFFFFFFF == ULLONG_MAX

typedef signed long long SInt64;

typedef unsigned long long UInt64;

#endif

#endif

#endif

#endif

/* Test.c */

#include "Int.h"

#include <stdio.h>

int main(int argc, char *argv[])

{

     printf("sizeof(SInt8) * CHAR_BIT = %d/n", sizeof(SInt8) * CHAR_BIT); /* 8 */

     printf("sizeof(UInt8) * CHAR_BIT = %d/n", sizeof(UInt8) * CHAR_BIT); /* 8 */

     printf("sizeof(SInt16) * CHAR_BIT = %d/n", sizeof(SInt16) * CHAR_BIT); /* 16 */

     printf("sizeof(UInt16) * CHAR_BIT = %d/n", sizeof(UInt16) * CHAR_BIT); /* 16 */

     printf("sizeof(SInt32) * CHAR_BIT = %d/n", sizeof(SInt32) * CHAR_BIT); /* 32 */

     printf("sizeof(UInt32) * CHAR_BIT = %d/n", sizeof(UInt32) * CHAR_BIT); /* 32 */

     printf("sizeof(SInt64) * CHAR_BIT = %d/n", sizeof(SInt64) * CHAR_BIT); /* 64 */

     printf("sizeof(UInt64) * CHAR_BIT = %d/n", sizeof(UInt64) * CHAR_BIT); /* 64 */

     return 0;

}

呵呵,以后写程序可以实现整型数据的机器无关,编译器无关了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值