From fc00c656c96528112d05cf0edf8631bd5eaea446 Mon Sep 17 00:00:00 2001 From: Kacper Date: Sun, 7 Dec 2025 20:10:31 +0100 Subject: Add build system scaffolding and libc headers --- include/assert.h | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 include/assert.h (limited to 'include/assert.h') diff --git a/include/assert.h b/include/assert.h new file mode 100644 index 00000000..f69aa43d --- /dev/null +++ b/include/assert.h @@ -0,0 +1,39 @@ +#ifndef __ASSERT_H +#define __ASSERT_H + +#ifdef NDEBUG +#define assert(ignore) ((void)0) +#else + +/** + * @def assert(expr) + * @brief Macro to perform runtime assertions. + * + * The assert() macro shall insert diagnostics into programs; it shall expand to + * a void expression. When it is executed, if expression (which shall have a + * scalar type) is false (that is, compares equal to 0), assert() shall write + * information about the particular call that failed on stderr and shall call + * abort(). The information written about the call that failed shall include the + * text of the argument, the name of the source file, the source file line + * number, and the name of the enclosing function; the latter are, respectively, + * the values of the preprocessing * macros __FILE__ and __LINE__ and of the + * identifier __func__. Forcing a definition of the name NDEBUG, either from the + * compiler command line or with the preprocessor control statement #define + * NDEBUG ahead of the #include statement, shall stop assertions from + * being compiled into the program. + * + * @param expr The expression to be evaluated. + * + * @see abort + */ +#define assert(__expr) \ + ((__expr) ? \ + (void)0 : \ + __assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, #__expr)) +#endif + +_Noreturn void __assert(const char *_Nonnull __file, int __line, + const char *_Nonnull __func, + const char *_Nonnull __expr); + +#endif -- cgit v1.2.3