阅读suricata源码时注意到有检查CPPCHECK这个宏。
当CPPCHECK==1时,进行简单的宏定义。其他情况进行复杂的宏定义。
比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#if CPPCHECK==1
#define BUG_ON(x) if (((x))) exit(1)
#else
#if defined HAVE_ASSERT_H && !defined NDEBUG
#include <assert.h>
#define BUG_ON(x) assert(!(x))
#else
#define BUG_ON(x) do { \
if (((x))) { \
fprintf(stderr, "BUG at %s:%d(%s)\n", __FILE__, __LINE__, __func__); \
fprintf(stderr, "Code: '%s'\n", xstr((x))); \
exit(EXIT_FAILURE); \
} \
} while(0)
#endif
#endif

这个宏可以区分是在cppcheck检查模式下还是普通的编译模式。

cppcheck一个c/c++代码缺陷静态检查工具,主页http://cppcheck.sourceforge.net/