为什么这个奇怪的定义为PTHREAD_CREATE_JOINABLE,PTHREAD_CREATE_DETACHED

use*_*631 4 c

pthread.h,可以找到以下定义:

/* Detach state.  */
enum
{
  PTHREAD_CREATE_JOINABLE,
#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE
  PTHREAD_CREATE_DETACHED
#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED
};
Run Code Online (Sandbox Code Playgroud)

为什么这个定义混合枚举和定义?怎么解释呢?此外,它#define正在定义相同的东西.

das*_*ght 7

这是因为PTHREAD_CREATE_JOINABLE并且PTHREAD_CREATE_DETACHED需要在#ifdef语句中使用(这里是以这种方式使用它的源代码示例).作者需要将其名称定义为其值,否则预处理器将不允许您使用相应的enum值.