std1.0.0-beta-7 SafeC docs

Source stdint.h

View in the repository

// SafeC Standard Library — Fixed-width integer types (C99/C11/C17/C23)
// Provides exact-width, minimum-width, and fastest integer type aliases.
#pragma once

// ── Exact-width signed integers ───────────────────────────────────────────────
#define int8_t   signed char
#define int16_t  short
#define int32_t  int
#define int64_t  long long

// ── Exact-width unsigned integers ─────────────────────────────────────────────
#define uint8_t   unsigned char
#define uint16_t  unsigned short
#define uint32_t  unsigned int
#define uint64_t  unsigned long long

// ── Pointer-sized integers (pointer-width; see stddef.h) ──────────────────────
#ifndef SAFEC_PTRWIDTH_TYPES_
#define SAFEC_PTRWIDTH_TYPES_
#if __SIZEOF_POINTER__ == 4
#define size_t      unsigned int
#define ssize_t     int
#define ptrdiff_t   int
#define intptr_t    int
#define uintptr_t   unsigned int
#else
#define size_t      unsigned long long
#define ssize_t     long long
#define ptrdiff_t   long long
#define intptr_t    long long
#define uintptr_t   unsigned long long
#endif
#endif

// ── Maximum-width integers ────────────────────────────────────────────────────
#define intmax_t   long long
#define uintmax_t  unsigned long long


// ── Exact-width signed limits ─────────────────────────────────────────────────
#define INT8_MIN    (-128)
#define INT8_MAX    127
#define INT16_MIN   (-32768)
#define INT16_MAX   32767
#define INT32_MIN   (-2147483647 - 1)
#define INT32_MAX   2147483647
#define INT64_MIN   (-9223372036854775807LL - (long long)1)
#define INT64_MAX   9223372036854775807LL

// ── Exact-width unsigned limits ───────────────────────────────────────────────
#define UINT8_MAX   255
#define UINT16_MAX  65535
#define UINT32_MAX  4294967295U
#define UINT64_MAX  18446744073709551615ULL

// ── Pointer / ptrdiff / size limits ───────────────────────────────────────────
#define INTPTR_MIN   INT64_MIN
#define INTPTR_MAX   INT64_MAX
#define UINTPTR_MAX  UINT64_MAX
#define PTRDIFF_MIN  INT64_MIN
#define PTRDIFF_MAX  INT64_MAX
#define SIZE_MAX     UINT64_MAX

// ── Maximum-width limits ──────────────────────────────────────────────────────
#define INTMAX_MIN   INT64_MIN
#define INTMAX_MAX   INT64_MAX
#define UINTMAX_MAX  UINT64_MAX

// ── Minimum-width type aliases (commonly INT_LEAST*_t) ────────────────────────
#define int_least8_t    signed char
#define int_least16_t   short
#define int_least32_t   int
#define int_least64_t   long long
#define uint_least8_t   unsigned char
#define uint_least16_t  unsigned short
#define uint_least32_t  unsigned int
#define uint_least64_t  unsigned long long

// ── Fast integer aliases (at least N bits, fastest representation) ────────────
#define int_fast8_t    int
#define int_fast16_t   int
#define int_fast32_t   int
#define int_fast64_t   long long
#define uint_fast8_t   unsigned int
#define uint_fast16_t  unsigned int
#define uint_fast32_t  unsigned int
#define uint_fast64_t  unsigned long long

// ── Integer constant suffixes (note: SafeC safe mode bans function-like macros) ──
// Use integer suffixes directly:
//   8-bit  : cast, e.g. (int8_t)42
//   16-bit : cast, e.g. (int16_t)42
//   32-bit : plain literal, e.g. 42
//   64-bit : LL suffix, e.g. 42LL
//   unsigned 32-bit : U suffix, e.g. 42U
//   unsigned 64-bit : ULL suffix, e.g. 42ULL