LINUX.ORG.RU

[C] #define внутри enum


0

0

Зачем нужна такая конструкция?

файл /usr/include/pthread.h:
enum
{
  PTHREAD_CREATE_JOINABLE,
#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE
  PTHREAD_CREATE_DETACHED
#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED

};


★★

Re: [C] #define внутри enum

Аналог

#define PTHREAD_CREATE_JOINABLE 0
#define PTHREAD_CREATE_DETACHED 1

И потом далее это может использоваться препроцессором... (в отличае от просто enum-ов)


ImHO аффтар - извращенец ;)


sS ★★★★★ ()

Re: [C] #define внутри enum

Могу предположить что есть пользователи пишущие код такого типа:

#ifdef PTHREAD_CREATE_JOINABLE
blahblah



dilmah ★★★★★ ()
Ответ на: Re: [C] #define внутри enum от sS

Re: [C] #define внутри enum

Что-то мне неочевидно, что это будут именно 0 и 1 во время работы препроцессора (например, можно ли будет #if ... = 0). Ведь препроцессор до компилятора работает... Надо будет попробовать.

svu ★★★★★ ()
Ответ на: Re: [C] #define внутри enum от svu

Re: [C] #define внутри enum

это делается для "плавающего кода", когда в сырцах нужно одним махом изменить именование енума, но не затрагивая сам код. В данном случае, имея...
enum
{
PTHREAD_CREATE_JOINABLE,
#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE

после модификации в такой вид

enum
{
PTHREAD_CREATE_JOINABLE2,
#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE2

во всех исходниках где было PTHREAD_CREATE_JOINABLE, препрцессор подменит на PTHREAD_CREATE_JOINABLE2.

Deleted ()
Ответ на: Re: [C] #define внутри enum от Deleted

Re: [C] #define внутри enum

Уффф... фигасе рефакторинг-tool, опасно ИМХО, но похоже на правду.

KIV ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.