我正在查看一些代码,发现了一个
#ifdef
:
#ifdef __MACH__在这里,
#define CLOCK_REALTIME 0
int clock_gettime (int /*clk_id*/, struct timespec *t) { struct timeval now; int rv = gettimeofday(&now, NULL); if (rv) return rv; t->tv_sec = now.tv_sec; t->tv_nsec = now.tv_usec * 1000; return 0; } #endif
__MACH__
是指什么?它是否是一个任意的名称,用来引用我正在编译的当前操作系统的“机器”?这可能是我能想到的唯一解释。
__MACH__
是由标准保留供实现使用的标识符,由于前导双下划线。特别地,__MACH__
是针对目标为苹果Unix操作系统(OSX、iOS和Darwin)的实现所定义的宏之一。名称基于"Mach Kernel",这是这些操作系统的核心。__MACH__
未定义用于旧的(非Unix)苹果操作系统。所有(受支持的)苹果系统均可使用__APPLE__
宏进行检测,因此,针对iOS/OSX/Darwin的一个测试条件是#if defined(__APPLE__) && defined(__MACH__)
。 - Peter