libcute 0.1
Loading...
Searching...
No Matches
macro.h
Go to the documentation of this file.
1#pragma once
2
6#define CU_IF_NULL(expr) if ((expr) == NULL)
8#define CU_IF_NOT_NULL(expr) if ((expr) != NULL)
10#define CU_DIE(msg) cu_panic_handler("Fatal error: %s", msg)
11
13#define CU_ALIGN_UP(x, align) (((x) + (align) - 1) & ~((align) - 1))
15#define CU_UNUSED(expr) (void)(expr)
17#define CU_ARRAY_LEN(arr) (sizeof(arr) / sizeof((arr)[0]))
19#define CU_BIT(x) (1u << (x))
20
22#define CU_CONCAT_(a, b) a##b
23#define CU_CONCAT(a, b) CU_CONCAT_(a, b)
24
25#define CU_MIN(a, b) ((a) < (b) ? (a) : (b))
26#define CU_MAX(a, b) ((a) > (b) ? (a) : (b))
27
29#if defined(_WIN32) || defined(_WIN64)
30#define CU_PLAT_WINDOWS 1
31#else
32#define CU_PLAT_WINDOWS 0
33#endif
34
35#if defined(__APPLE__)
36#define CU_PLAT_MACOS 1
37#else
38#define CU_PLAT_MACOS 0
39#endif
40
41#if defined(__linux__)
42#define CU_PLAT_LINUX 1
43#else
44#define CU_PLAT_LINUX 0
45#endif
46
47/* WebAssembly platform detection */
48#if defined(__EMSCRIPTEN__) || defined(__wasm__) || defined(__wasm32__)
49#define CU_PLAT_WASM 1
50#else
51#define CU_PLAT_WASM 0
52#endif
53
54#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
55#define CU_PLAT_BSD 1
56#else
57#define CU_PLAT_BSD 0
58#endif
59
60#if CU_PLAT_MACOS || CU_PLAT_LINUX || CU_PLAT_BSD
61#define CU_PLAT_POSIX 1
62#else
63#define CU_PLAT_POSIX 0
64#endif
65
66#if defined(__clang__)
67 #define CU_COMPILER_CLANG 1
68#else
69 #define CU_COMPILER_CLANG 0
70#endif
71
72#if defined(__GNUC__) && !CU_COMPILER_CLANG
73 #define CU_COMPILER_GCC 1
74#else
75 #define CU_COMPILER_GCC 0
76#endif
77
78#if defined(_MSC_VER)
79 #define CU_COMPILER_MSVC 1
80#else
81 #define CU_COMPILER_MSVC 0
82#endif
83
84#if defined(__TINYC__)
85 #define CU_COMPILER_TCC 1
86#else
87 #define CU_COMPILER_TCC 0
88#endif
89
90#if defined(__INTEL_COMPILER) || defined(__ICC)
91 #define CU_COMPILER_INTEL 1
92#else
93 #define CU_COMPILER_INTEL 0
94#endif
95
96#if defined(__llvm__) && !CU_COMPILER_CLANG
97 #define CU_COMPILER_LLVM 1
98#else
99 #define CU_COMPILER_LLVM 0
100#endif
101
102#if CU_COMPILER_CLANG && CU_PLAT_WINDOWS
103#undef noreturn
104#endif
105
106#define UNREACHABLE(msg) cu_panic_handler("Unreachable code reached: %s", msg)
107
108#define TODO(msg) cu_panic_handler("TODO: %s", msg)
109
110#define CU_AS(expr, T) (T)(expr)