2013-10-01 1 views
3

В pthread.h, можно найти следующее определение:Почему это странное определение PTHREAD_CREATE_JOINABLE, PTHREAD_CREATE_DETACHED

/* Detach state. */ 
enum 
{ 
    PTHREAD_CREATE_JOINABLE, 
#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE 
    PTHREAD_CREATE_DETACHED 
#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED 
}; 

Почему это определение смешивания перечисления и определяет? Как его интерпретировать? Кроме того, #define что-то определяет.

+0

Где у вас был этот файл? На какой среде? Вы уверены, что он не был изменен каким-либо образом («заменить все» кажется вероятной причиной)? – Asaf

+0

Забавно, как кто-то заметил то же самое, и спросил об этом на доске объявлений Linux на русском языке (http://www.linux.org.ru/forum/development/1914780). – dasblinkenlight

+0

@asaf: это только мой обычный /usr/include/pthread.h на RHEL 6.4 – user1284631

ответ

6

Это потому, что PTHREAD_CREATE_JOINABLE и PTHREAD_CREATE_DETACHED необходимо использовать в операциях #ifdef (here is an example of source code where it is used in this way). Авторы должны были определить свои имена для своих значений, иначе препроцессор не позволит вам использовать соответствующее значение enum.

Смежные вопросы