Skip to content

Instantly share code, notes, and snippets.

@npavlinek
Created October 6, 2022 17:22
Show Gist options
  • Select an option

  • Save npavlinek/115adbd7a7cc5b9778abe7f8f8d089d2 to your computer and use it in GitHub Desktop.

Select an option

Save npavlinek/115adbd7a7cc5b9778abe7f8f8d089d2 to your computer and use it in GitHub Desktop.
Fixed-width Integer Types for ANSI C
#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