对于一个#ifdef,__MACH__是什么意思?

4
我正在查看一些代码,发现了一个#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__是指什么?它是否是一个任意的名称,用来引用我正在编译的当前操作系统的“机器”?这可能是我能想到的唯一解释。

1
显然,它指的是Mac OSX,你应该找到它是由构建系统或甚至编译器定义的。 - M.M
4
__MACH__是由标准保留供实现使用的标识符,由于前导双下划线。特别地,__MACH__是针对目标为苹果Unix操作系统(OSX、iOS和Darwin)的实现所定义的宏之一。名称基于"Mach Kernel",这是这些操作系统的核心。__MACH__未定义用于旧的(非Unix)苹果操作系统。所有(受支持的)苹果系统均可使用__APPLE__宏进行检测,因此,针对iOS/OSX/Darwin的一个测试条件是#if defined(__APPLE__) && defined(__MACH__) - Peter
1
@Peter:https://en.wikipedia.org/wiki/Mach_(kernel) - Mark Ransom
1个回答

3

__MACH__是一个内置的编译器宏,用于指示是否在Macintosh操作系统上。当在Mac机器上编译时定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接