2020301918-os/inc/type.h
2022-10-19 21:37:15 +08:00

63 lines
1.3 KiB
C

#ifndef MINIOS_TYPE_H
#define MINIOS_TYPE_H
#ifndef NULL
#define NULL ((void*) 0)
#endif
// #define HAPPY_SNAKE
typedef _Bool bool;
enum { false, true };
typedef int i32;
typedef unsigned int u32;
typedef short i16;
typedef unsigned short u16;
typedef char i8;
typedef unsigned char u8;
typedef i32 intptr_t;
typedef u32 uintptr_t;
// 通常描述一个对象的大小,会根据机器的型号变化类型
typedef u32 size_t;
// signed size_t 通常描述系统调用返回值,会根据机器的型号变化类型
typedef i32 ssize_t;
// 通常描述偏移量,会根据机器的型号变化类型
typedef i32 off_t;
// 通常描述物理地址
typedef u32 phyaddr_t;
#define MIN(_a, _b) \
({ \
typeof(_a) __a = (_a); \
typeof(_b) __b = (_b); \
__a <= __b ? __a : __b; \
})
#define MAX(_a, _b) \
({ \
typeof(_a) __a = (_a); \
typeof(_b) __b = (_b); \
__a >= __b ? __a : __b; \
})
#define ROUNDDOWN(a, n) \
({ \
u32 __a = (u32) (a); \
(typeof(a)) (__a - __a % n); \
})
#define ROUNDUP(a, n) \
({ \
u32 __n = (u32) (n); \
(typeof(a)) (ROUNDDOWN((u32) (a) + __n - 1, __n)); \
})
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
// 求出在结构体中的某个成员的偏移量
#define offsetof(type, member) ((size_t) (&((type*)0)->member))
#endif /* MINIOS_TYPE_H */