Created
October 6, 2022 17:22
-
-
Save npavlinek/115adbd7a7cc5b9778abe7f8f8d089d2 to your computer and use it in GitHub Desktop.
Fixed-width Integer Types for ANSI C
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #ifndef FIXED_WIDTH_INTEGERS_H | |
| #define FIXED_WIDTH_INTEGERS_H | |
| #include <limits.h> | |
| /******************************************************************************* | |
| * Fixed Width Unsigned Integer Types | |
| ******************************************************************************/ | |
| #ifndef FIXED_WIDTH_UNSIGNED_8_BIT_INTEGER_NAME | |
| #define FIXED_WIDTH_UNSIGNED_8_BIT_INTEGER_NAME u8 | |
| #endif | |
| #ifndef FIXED_WIDTH_UNSIGNED_16_BIT_INTEGER_NAME | |
| #define FIXED_WIDTH_UNSIGNED_16_BIT_INTEGER_NAME u16 | |
| #endif | |
| #ifndef FIXED_WIDTH_UNSIGNED_32_BIT_INTEGER_NAME | |
| #define FIXED_WIDTH_UNSIGNED_32_BIT_INTEGER_NAME u32 | |
| #endif | |
| #ifndef FIXED_WIDTH_UNSIGNED_64_BIT_INTEGER_NAME | |
| #define FIXED_WIDTH_UNSIGNED_64_BIT_INTEGER_NAME u64 | |
| #endif | |
| #if UCHAR_MAX == 255 | |
| typedef unsigned char FIXED_WIDTH_UNSIGNED_8_BIT_INTEGER_NAME; | |
| #endif | |
| #if UCHAR_MAX == 65535 | |
| typedef unsigned char FIXED_WIDTH_UNSIGNED_16_BIT_INTEGER_NAME; | |
| #elif USHRT_MAX == 65535 | |
| typedef unsigned short FIXED_WIDTH_UNSIGNED_16_BIT_INTEGER_NAME; | |
| #elif UINT_MAX == 65535 | |
| typedef unsigned int FIXED_WIDTH_UNSIGNED_16_BIT_INTEGER_NAME; | |
| #endif | |
| #if UCHAR_MAX == 4294967295ul | |
| typedef unsigned char FIXED_WIDTH_UNSIGNED_32_BIT_INTEGER_NAME; | |
| #elif USHRT_MAX == 4294967295ul | |
| typedef unsigned short FIXED_WIDTH_UNSIGNED_32_BIT_INTEGER_NAME; | |
| #elif UINT_MAX == 4294967295ul | |
| typedef unsigned int FIXED_WIDTH_UNSIGNED_32_BIT_INTEGER_NAME; | |
| #elif ULONG_MAX == 4294967295ul | |
| typedef unsigned long FIXED_WIDTH_UNSIGNED_32_BIT_INTEGER_NAME; | |
| #endif | |
| #if UCHAR_MAX == 18446744073709551615ul | |
| typedef unsigned char FIXED_WIDTH_UNSIGNED_64_BIT_INTEGER_NAME; | |
| #elif USHRT_MAX == 18446744073709551615ul | |
| typedef unsigned short FIXED_WIDTH_UNSIGNED_64_BIT_INTEGER_NAME; | |
| #elif UINT_MAX == 18446744073709551615ul | |
| typedef unsigned int FIXED_WIDTH_UNSIGNED_64_BIT_INTEGER_NAME; | |
| #elif ULONG_MAX == 18446744073709551615ul | |
| typedef unsigned long FIXED_WIDTH_UNSIGNED_64_BIT_INTEGER_NAME; | |
| #endif | |
| #ifdef _WIN64 | |
| typedef unsigned __int64 FIXED_WIDTH_UNSIGNED_64_BIT_INTEGER_NAME; | |
| #endif | |
| /******************************************************************************* | |
| * Fixed Width Signed Integer Types | |
| ******************************************************************************/ | |
| #ifndef FIXED_WIDTH_SIGNED_8_BIT_INTEGER_NAME | |
| #define FIXED_WIDTH_SIGNED_8_BIT_INTEGER_NAME s8 | |
| #endif | |
| #ifndef FIXED_WIDTH_SIGNED_16_BIT_INTEGER_NAME | |
| #define FIXED_WIDTH_SIGNED_16_BIT_INTEGER_NAME s16 | |
| #endif | |
| #ifndef FIXED_WIDTH_SIGNED_32_BIT_INTEGER_NAME | |
| #define FIXED_WIDTH_SIGNED_32_BIT_INTEGER_NAME s32 | |
| #endif | |
| #ifndef FIXED_WIDTH_SIGNED_64_BIT_INTEGER_NAME | |
| #define FIXED_WIDTH_SIGNED_64_BIT_INTEGER_NAME s64 | |
| #endif | |
| #if SCHAR_MIN == -128 && SCHAR_MAX == 127 | |
| typedef signed char FIXED_WIDTH_SIGNED_8_BIT_INTEGER_NAME; | |
| #endif | |
| #if SCHAR_MIN == -32768 && SCHAR_MAX == 32767 | |
| typedef signed char FIXED_WIDTH_SIGNED_16_BIT_INTEGER_NAME; | |
| #elif SHRT_MIN == -32768 && SHRT_MAX == 32767 | |
| typedef signed short FIXED_WIDTH_SIGNED_16_BIT_INTEGER_NAME; | |
| #elif INT_MIN == -32768 && INT_MAX == 32767 | |
| typedef signed int FIXED_WIDTH_SIGNED_16_BIT_INTEGER_NAME; | |
| #endif | |
| #if SCHAR_MIN == -2147483648l && SCHAR_MAX == 2147483647ul | |
| typedef signed char FIXED_WIDTH_SIGNED_32_BIT_INTEGER_NAME; | |
| #elif SHRT_MIN == -2147483648l && SHRT_MAX == 2147483647ul | |
| typedef signed short FIXED_WIDTH_SIGNED_32_BIT_INTEGER_NAME; | |
| #elif INT_MIN == -2147483648l && INT_MAX == 2147483647ul | |
| typedef signed int FIXED_WIDTH_SIGNED_32_BIT_INTEGER_NAME; | |
| #elif LONG_MIN == -2147483648l && LONG_MAX == 2147483647ul | |
| typedef signed long FIXED_WIDTH_SIGNED_32_BIT_INTEGER_NAME; | |
| #endif | |
| #if SCHAR_MIN == -9223372036854775808ll && SCHAR_MAX == 9223372036854775807ull | |
| typedef signed char FIXED_WIDTH_SIGNED_64_BIT_INTEGER_NAME; | |
| #elif SHRT_MIN == -9223372036854775808ll && SHRT_MAX == 9223372036854775807ull | |
| typedef signed short FIXED_WIDTH_SIGNED_64_BIT_INTEGER_NAME; | |
| #elif INT_MIN == -9223372036854775808ll && INT_MAX == 9223372036854775807ull | |
| typedef signed int FIXED_WIDTH_SIGNED_64_BIT_INTEGER_NAME; | |
| #elif LONG_MIN == -9223372036854775808ll && LONG_MAX == 9223372036854775807ull | |
| typedef signed long FIXED_WIDTH_SIGNED_64_BIT_INTEGER_NAME; | |
| #endif | |
| #ifdef _WIN64 | |
| typedef signed __int64 FIXED_WIDTH_SIGNED_64_BIT_INTEGER_NAME; | |
| #endif | |
| #endif /* FIXED_WIDTH_INTEGERS_H */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment