12#ifndef __XF_PREDEF_H__
13#define __XF_PREDEF_H__
34#if !defined(__FILENAME__)
39#define __FILENAME__ (__builtin_strrchr(__FILE__, '/') \
40 ? (__builtin_strrchr(__FILE__, '/') + 1) \
43#define __FILENAME__ __FILE__
64#define UNUSED(x) do { (void)(x); } while(0)
71#define CONCAT(a, b) a##b
78#define CONCAT3(a, b, c) a##b##c
86#define XCONCAT(a, b) CONCAT(a, b)
94#define XCONCAT3(a, b, c) CONCAT3(a, b, c)
110#define XSTR(x) STR(x)
121#define xf_offsetof(type, member) ((size_t)&((type *)0)->member)
124#ifndef xf_container_of
161#define xf_container_of(ptr, type, member) \
162 ((type *)((char *)(ptr) - xf_offsetof(type, member)))
173#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
预定义. xf_attr.h 等头文件通过包含本文件减少对其余外部文件的直接依赖. 如: xfconfig.h.