Uprintf
Header-only library for printing anything in C/C++ on Linux.
Install / Use
/learn @spevnev/UprintfREADME
Universal printf
uprintf is a header-only library for printing anything in C/C++.
Examples
Examples and their outputs can be found in examples, and can be built using make examples.
Example outputs
<details> <summary>avl (<a href="https://github.com/etherealvisage/avl">src</a>)</summary>AVL tree: {
avl_tree_node_t *root = 0x7bc351a1ffd0 ({
avl_tree_node_t *left = 0x7bc3519fffd0 ({
avl_tree_node_t *left = 0x7bc3519effd0 ({
avl_tree_node_t *left = 0x7bc3519e7fd0 ({
avl_tree_node_t *left = 0x7bc3519e3fd0 ({...})
avl_tree_node_t *right = 0x7bc3519ebfd0 ({...})
int depth = 10
void *key = 0x1ff
void *data = 0x1ff
})
avl_tree_node_t *right = 0x7bc3519f7fd0 ({
avl_tree_node_t *left = 0x7bc3519f3fd0 ({...})
avl_tree_node_t *right = 0x7bc3519fbfd0 ({...})
int depth = 10
void *key = 0x5ff
void *data = 0x5ff
})
int depth = 11
void *key = 0x3ff
void *data = 0x3ff
})
avl_tree_node_t *right = 0x7bc351a0ffd0 ({
avl_tree_node_t *left = 0x7bc351a07fd0 ({
avl_tree_node_t *left = 0x7bc351a03fd0 ({...})
avl_tree_node_t *right = 0x7bc351a0bfd0 ({...})
int depth = 10
void *key = 0x9ff
void *data = 0x9ff
})
avl_tree_node_t *right = 0x7bc351a17fd0 ({
avl_tree_node_t *left = 0x7bc351a13fd0 ({...})
avl_tree_node_t *right = 0x7bc351a1bfd0 ({...})
int depth = 10
void *key = 0xdff
void *data = 0xdff
})
int depth = 11
void *key = 0xbff
void *data = 0xbff
})
int depth = 12
void *key = 0x7ff
void *data = 0x7ff
})
avl_tree_node_t *right = 0x7bc351a3ffd0 ({
avl_tree_node_t *left = 0x7bc351a2ffd0 ({
avl_tree_node_t *left = 0x7bc351a27fd0 ({
avl_tree_node_t *left = 0x7bc351a23fd0 ({...})
avl_tree_node_t *right = 0x7bc351a2bfd0 ({...})
int depth = 10
void *key = 0x11ff
void *data = 0x11ff
})
avl_tree_node_t *right = 0x7bc351a37fd0 ({
avl_tree_node_t *left = 0x7bc351a33fd0 ({...})
avl_tree_node_t *right = 0x7bc351a3bfd0 ({...})
int depth = 10
void *key = 0x15ff
void *data = 0x15ff
})
int depth = 11
void *key = 0x13ff
void *data = 0x13ff
})
avl_tree_node_t *right = 0x7bc351a5ffd0 ({
avl_tree_node_t *left = 0x7bc351a4ffd0 ({
avl_tree_node_t *left = 0x7bc351a47fd0 ({...})
avl_tree_node_t *right = 0x7bc351a57fd0 ({...})
int depth = 11
void *key = 0x1bff
void *data = 0x1bff
})
avl_tree_node_t *right = 0x7bc351a6ffd0 ({
avl_tree_node_t *left = 0x7bc351a67fd0 ({...})
avl_tree_node_t *right = 0x7bc351a77fd0 ({...})
int depth = 11
void *key = 0x23ff
void *data = 0x23ff
})
int depth = 12
void *key = 0x1fff
void *data = 0x1fff
})
int depth = 13
void *key = 0x17ff
void *data = 0x17ff
})
int depth = 14
void *key = 0xfff
void *data = 0xfff
})
int(void *, void *) comparator = 0x557bc91077ae (int cmp(void *k1, void *k2))
void(void *) destructor = NULL
}
</details>
<details>
<summary>sqlite (<a href="https://www.sqlite.org">src</a>)</summary>
Sqlite's database: <#0> {
sqlite3_vfs *pVfs = 0x558311446500 (<#1> {
int iVersion = 3
int szOsFile = 120
int mxPathname = 512
sqlite3_vfs *pNext = 0x558311097720 ({
int iVersion = 2
int szOsFile = 120
int mxPathname = 1024
sqlite3_vfs *pNext = 0x5583114466f8 ({
int iVersion = 3
int szOsFile = 120
int mxPathname = 512
sqlite3_vfs *pNext = 0x558311446650 ({
int iVersion = 3
int szOsFile = 120
int mxPathname = 512
sqlite3_vfs *pNext = 0x5583114465a8 ({
int iVersion = 3
int szOsFile = 120
int mxPathname = 512
sqlite3_vfs *pNext = NULL
const char *zName = 0x558310eeb580 ("unix-none")
void *pAppData = 0x5583110491c0
int(sqlite3_vfs *, const char *, sqlite3_file *, int, int *) xOpen = 0x5583109d654f (int unixOpen(sqlite3_vfs *pVfs, const char *zPath, sqlite3_file *pFile, int flags, int *pOutFlags))
int(sqlite3_vfs *, const char *, int) xDelete = 0x5583109d738e (int unixDelete(sqlite3_vfs *NotUsed, const char *zPath, int dirSync))
int(sqlite3_vfs *, const char *, int, int *) xAccess = 0x5583109d7655 (int unixAccess(sqlite3_vfs *NotUsed, const char *zPath, int flags, int *pResOut))
int(sqlite3_vfs *, const char *, int, char *) xFullPathname = 0x5583109d92dc (int unixFullPathname(sqlite3_vfs *pVfs, const char *zPath, int nOut, char *zOut))
void *(sqlite3_vfs *, const char *) xDlOpen = 0x5583109d9879 (void *unixDlOpen(sqlite3_vfs *NotUsed, const char *zFilename))
void(sqlite3_vfs *, int, char *) xDlError = 0x5583109d989c (void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut))
(void())(sqlite3_vfs *, void *, const char *) xDlSym = 0x5583109d98f0 ((void()) unixDlSym(sqlite3_vfs *NotUsed, void *p, const char *zSym))
void(sqlite3_vfs *, void *) xDlClose = 0x5583109d9925 (void unixDlClose(sqlite3_vfs *NotUsed, void *pHandle))
int(sqlite3_vfs *, int, char *) xRandomness = 0x5583109d995a (int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf))
int(sqlite3_vfs *, int) xSleep = 0x5583109d9d20 (int unixSleep(sqlite3_vfs *NotUsed, int microseconds))
int(sqlite3_vfs *, double *) xCurrentTime = 0x5583109da128 (int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow))
int(sqlite3_vfs *, int, char *) xGetLastError = 0x5583109da305 (int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3))
int(sqlite3_vfs *, sqlite3_int64 *) xCurrentTimeInt64 = 0x5583109d9ee4 (int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piNow))
int(sqlite3_vfs *, const char *, void()) xSetSystemCall = 0x5583109c0bed (int unixSetSystemCall(sqlite3_vfs *pNotUsed, const char *zName, void() pNewFunc))
(void())(sqlite3_vfs *, const char *) xGetSystemCall = 0x5583109c17ba ((void()) unixGetSystemCall(sqlite3_vfs *pNotUsed, const char *zName))
const char *(sqlite3_vfs *, const char *) xNextSystemCall = 0x5583109c1a92 (const char *unixNextSystemCall(sqlite3_vfs *p, const char *zName))
})
const char *zName = 0x558310eeb5c0 ("unix-dotfile")
void *pAppData = 0x5583110492c0
int(sqlite3_vfs *, const char *, sqlite3_file *, int, int *) xOpen = 0x5583109d654f (int unixOpen(sqlite3_vfs *pVfs, const char *zPath, sqlite3_file *pFile, int flags, int *pOutFlags))
int(sqlite3_vfs *, const char *, int) xDelete = 0x5583109d738e (int unixDelete(sqlite3_vfs *NotUsed, const char *zPath, int dirSync))
int(sqlite3_vfs *, const char *, int, int *) xAccess = 0x5583109d7655 (int unixAccess(sqlite3_vfs *NotUsed, const char *zPath, int flags, int *pResOut))
int(sqlite3_vfs *, const char *, int, char *) xFullPathname = 0x5583109d92dc (int unixFullPathname(sqlite3_vfs *pVfs, const char *zPath, int nOut, char *zOut))
void *(sqlite3_vfs *, const char *) xDlOpen = 0x5583109d9879 (void *unixDlOpen(sqlite3_vfs *NotUsed, const char *zFilename))
void(sqlite3_vfs *, int, char *) xDlError = 0x5583109d989c (void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut))
(void())(sqlite3_vfs *, void *, const char *) xDlSym = 0x5583109d98f0 ((void()) unixDlSym(sqlite3_vfs *NotUsed, void *p, const char *zSym))
void(sqlite3_vfs *, void *) xDlClose = 0x5583109d9925 (void unixDlClose(sqlite3_vfs *NotUsed, void *pHandle))
int(sqlite3_vfs *, int, char *) xRandomness = 0x5583109d995a (int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf))
int(sqlite3_vfs *, int) xSleep = 0x5583109d9d20 (int unixSleep(sqlite3_vfs *NotUsed, int microseconds))
int(sqlite3_vfs *, double *) xCurrentTime = 0x5583109da128 (int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow))
int(sqlite3_vfs *, int, char *) xGetLastError = 0x5583109da305 (int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3))
int(sqlite3_vfs *, sqlite3_int64 *) xCurrentTimeInt64 = 0x5583109d9ee4 (int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piNow))
int(sqlite3_vfs *, const char *, void()) xSetSystemCall = 0x5583109c0bed (int unixSetSystemCall(sqlite3_vfs *pNotUsed, const char *zName, void() pNewFunc))
(void())(sqlite3_vfs *, const char *) xGetSystemCall = 0x5583109c17ba ((void()) unixGetSystemCall(sqlite3_vfs *pNotUsed, const char *zName))
const char *(sqlite3_vfs *, const char *) xNextSystemCall = 0x5583109c1a92 (const char *unixNextSystemCall(sqlite3_vfs *p, const char *zName))
})
const char *zName = 0x558310ec9660 ("unix-excl")
void *pAppData = 0x5583110490c0
int(sqlite3_vfs *, const char *, sqlite3_file *, int, int *) xOpen = 0x5583109
