stdlib.h(3)

πŸ“¦ version 2.2.1, in fedora 43, fedora 44, opensuse-leap 16.0

πŸ’– stdlib.h πŸ’–

okay bestie, sit DOWN because we're doing stdlib.h from avr-libc today and it's lowkey the blueprint of every C program you've ever loved. this is the header that hands you memory, math-ish number crunching, sorting, searching, and the iconic exit(). it's giving backstage pass to the whole runtime. let's get into it ✨


🌸 NAME 🌸

stdlib.h β€” the standard library header, bestie. that's it, that's the name πŸ’…


✨ SYNOPSIS ✨

πŸŽ€ Data Structures

the little structs that hold your division results, so you get the quotient AND the remainder in one gorgeous package:

  • struct div_t
  • struct ldiv_t

πŸ“ Macros

  • #define RAND_MAX 0x7FFF

that's your ceiling for rand(), periodt.


πŸ¦‹ Typedefs

  • typedef int(* __compar_fn_t) (const void *, const void *)

this is the function-pointer type you hand to qsort() and bsearch() so they know how to compare your stuff. two const void * args, returns an int. iconic signature tbh.


πŸ‘‘ Functions

here's the whole roster, no cap, nothing skipped:

void abort (void) __ATTR_NORETURN__
int abs (int __i)
long labs (long __i)
void * bsearch (const void *__key, const void *__base, size_t __nmemb,
    size_t __size, int(*__compar)(const void *, const void *))
div_t div (int __num, int __denom) __asm__('__divmodhi4')
ldiv_t ldiv (long __num, long __denom) __asm__('__divmodsi4')
void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t
    __compar)
long strtol (const char *__nptr, char **__endptr, int __base)
unsigned long strtoul (const char *__nptr, char **__endptr, int __base)
long atol (const char *__s) __ATTR_PURE__
int atoi (const char *__s) __ATTR_PURE__
void exit (int __status) __ATTR_NORETURN__
void * malloc (size_t __size) __ATTR_MALLOC__
void free (void *__ptr)
void * calloc (size_t __nele, size_t __size) __ATTR_MALLOC__
void * realloc (void *__ptr, size_t __size) __ATTR_MALLOC__
double strtod (const char *__nptr, char **__endptr)
double atof (const char *__nptr)
int rand (void)
void srand (unsigned int __seed)
int rand_r (unsigned long *__ctx)
quick vibes check on those attributes: __ATTR_NORETURN__ means the function never comes back (it's leaving the party and not saying bye), __ATTR_MALLOC__ and __ATTR_PURE__ are compiler hints, and __asm__('__divmodhi4') / __asm__('__divmodsi4') are the literal assembly symbol names. copy those exactly, bestie, character for character. πŸ™ˆ

πŸ’œ Variables

the malloc internals you can poke at:

  • size_t __malloc_margin
  • char * __malloc_heap_start
  • char * __malloc_heap_end

🌈 Non-standard (i.e. non-ISO C) functions.

these are the bonus tracks β€” not ISO C, but avr-libc said "and for my next trick":

  • #define RANDOM_MAX 0x7FFFFFFF
  • char * itoa (int val, char *s, int radix)
  • char * ltoa (long val, char *s, int radix)
  • char * utoa (unsigned int val, char *s, int radix)
  • char * ultoa (unsigned long val, char *s, int radix)
  • long random (void)
  • void srandom (unsigned long __seed)
  • long random_r (unsigned long *__ctx)

🧚 Conversion functions for double arguments.

okay bestie this part is IMPORTANT, read it twice:

Note that these functions are not located in the default library, libc.a, but in the mathematical library, libm.a. So when linking the application, the -lm option needs to be specified.

translation: if you forget -lm you're gonna get link errors and cry. don't do that to yourself. 😭

#define DTOSTR_ALWAYS_SIGN   0x01        /* put '+' or ' ' for positives
    */
#define DTOSTR_PLUS_SIGN   0x02        /* put '+' rather than ' ' */
#define DTOSTR_UPPERCASE   0x04        /* put 'E' rather 'e' */
#define EXIT_SUCCESS   0
#define EXIT_FAILURE   1
char * dtostre (double __val, char *__s, unsigned char __prec, unsigned
    char __flags)
char * dtostrf (double __val, signed char __width, unsigned char __prec,
    char *__s)

those three DTOSTR_* flags are bit flags, so you OR them together like the little legends they are. ✨


🫢 Author

Generated automatically by Doxygen for avr-libc from the source code.


and that's the whole page, bestie!! πŸ’– it was written by Doxygen (the auto-generation queen) for avr-libc, and this specific glow-up is Version 2.1.0, dated Sat Jan 29 2022. go forth and malloc responsibly, mwah πŸ’…πŸŽ€

πŸ“¦ where this page comes from