Menu Toggle
v1.5.1
assert.h
1
/*
2
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
3
*
4
* SPDX-License-Identifier: BSD-3-Clause
5
*/
6
7
#ifndef _PICO_ASSERT_H
8
#define _PICO_ASSERT_H
9
10
#include <stdbool.h>
11
12
#ifdef __cplusplus
13
14
#include <cassert>
15
16
extern
"C"
{
17
#else
18
#include <assert.h>
19
#endif
20
21
// PICO_CONFIG: PARAM_ASSERTIONS_ENABLE_ALL, Global assert enable, type=bool, default=0, group=pico_base
22
// PICO_CONFIG: PARAM_ASSERTIONS_DISABLE_ALL, Global assert disable, type=bool, default=0, group=pico_base
23
24
#ifndef PARAM_ASSERTIONS_ENABLE_ALL
25
#define PARAM_ASSERTIONS_ENABLE_ALL 0
26
#endif
27
28
#ifndef PARAM_ASSERTIONS_DISABLE_ALL
29
#define PARAM_ASSERTIONS_DISABLE_ALL 0
30
#endif
31
32
#define PARAM_ASSERTIONS_ENABLED(x) ((PARAM_ASSERTIONS_ENABLED_ ## x || PARAM_ASSERTIONS_ENABLE_ALL) && !PARAM_ASSERTIONS_DISABLE_ALL)
33
34
#define invalid_params_if(x, test) ({if (PARAM_ASSERTIONS_ENABLED(x)) assert(!(test));})
35
#define valid_params_if(x, test) ({if (PARAM_ASSERTIONS_ENABLED(x)) assert(test);})
36
#define hard_assert_if(x, test) ({if (PARAM_ASSERTIONS_ENABLED(x)) hard_assert(!(test));})
37
38
#ifdef NDEBUG
39
extern
void
hard_assertion_failure(
void
);
40
static
inline
void
hard_assert(
bool
condition, ...) {
41
if
(!condition)
42
hard_assertion_failure();
43
}
44
#else
45
#define hard_assert assert
46
#endif
47
48
#ifdef __cplusplus
49
}
50
#endif
51
#endif