Каков наилучший способ узнать, определено ли значение в перечислении? - PullRequest
1 голос
/ 14 октября 2011

Я читал, что трудно определить, входит ли элемент в перечисление.Итак, что будет лучшим способом?

Например, следующий код взят из ядра Linux 2.6.32:

enum v4l2_colorfx {
    V4L2_COLORFX_NONE    = 0,
    V4L2_COLORFX_BW      = 1,
    V4L2_COLORFX_SEPIA   = 2,
};

А этот из версии 2.6.38:

enum v4l2_colorfx {
    V4L2_COLORFX_NONE        = 0,
    V4L2_COLORFX_BW          = 1,
    V4L2_COLORFX_SEPIA       = 2,
    V4L2_COLORFX_NEGATIVE    = 3,
    V4L2_COLORFX_EMBOSS      = 4,
    V4L2_COLORFX_SKETCH      = 5,
    V4L2_COLORFX_SKY_BLUE    = 6,
    V4L2_COLORFX_GRASS_GREEN = 7,
    V4L2_COLORFX_SKIN_WHITEN = 8,
    V4L2_COLORFX_VIVID       = 9,
};

Как бы вы проверили, определен ли V4L2_COLORFX_NEGATIVE?#ifndef V4L2_COLORFX_NEGATIVE будет хорошо?

Ответы [ 2 ]

2 голосов
/ 14 октября 2011

Вам придется взглянуть на макрос компилятора в более широком контексте (например, версию linux, я не знаю, что доступно) или какую-то другую информацию во время компиляции. ifndef предназначен для проверки, определены ли макросы компилятора, а не символы в коде.

1 голос
/ 14 октября 2011

Проверьте версию linux в /usr/include/linux/version.h (вам нужно установить заголовки ядра)

содержит что-то вроде:

#define LINUX_VERSION_CODE 132640
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

Так что вы можете использовать это:

#if LINUX_VERSION_CODE >= KERNEL_VERSION( 2, 6, 38 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...