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

};


★★

Аналог

#define PTHREAD_CREATE_JOINABLE 0
#define PTHREAD_CREATE_DETACHED 1

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


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


sS ★★★★★
()

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

#ifdef PTHREAD_CREATE_JOINABLE
blahblah



dilmah ★★★★★
()
Ответ на: комментарий от sS

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

svu ★★★★★
()
Ответ на: комментарий от svu

это делается для "плавающего кода", когда в сырцах нужно одним махом изменить именование енума, но не затрагивая сам код. В данном случае, имея...
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
()
Ответ на: комментарий от Deleted

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

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