BRL-CAD
assert.h
Go to the documentation of this file.
1 /* A S S E R T . H
2  * BRL-CAD
3  *
4  * Copyright (c) 2020-2024 United States Government as represented by
5  * the U.S. Army Research Laboratory.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public License
9  * version 2.1 as published by the Free Software Foundation.
10  *
11  * This library is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this file; see the file named COPYING for more
18  * information.
19  */
20 
21 /** @addtogroup bu_defines */
22 /** @{ */
23 
24 #ifndef BU_ASSERT_H
25 #define BU_ASSERT_H
26 
27 #include "common.h"
28 
29 #include "bu/defines.h"
30 #include "bu/log.h"
31 #include "bu/exit.h"
32 
33 
34 /**
35  * @def BU_ASSERT(expression)
36  * @brief Alternative for assert(3) that calls LIBBU logging+bombing.
37  *
38  * This is a simple macro wrapper that logs an assertion-failure error
39  * message and aborts application execution if the specified
40  * expression is not hold true. While it is similar in use, this
41  * wrapper does not utilize assert(3) or NDEBUG but is disabled if
42  * NO_BOMBING_MACROS is defined by the configuration.
43  */
44 #ifdef NO_BOMBING_MACROS
45 # define BU_ASSERT(expression_) (void)(expression_)
46 #else
47 # define BU_ASSERT(expression_) \
48  if (UNLIKELY(!(expression_))) { \
49  const char *expression_buf_ = #expression_; \
50  bu_log("BU_ASSERT(%s) failure in file %s, line %d\n", \
51  expression_buf_, __FILE__, __LINE__); \
52  bu_bomb("BU_ASSERT FAILED\n"); \
53  }
54 #endif
55 
56 /** @} */
57 
58 #endif /* BU_ASSERT_H */
59 
60 /*
61  * Local Variables:
62  * mode: C
63  * tab-width: 8
64  * indent-tabs-mode: t
65  * c-file-style: "stroustrup"
66  * End:
67  * ex: shiftwidth=4 tabstop=8
68  */
Header file for the BRL-CAD common definitions.