2011-10-14 4 views
1

J'ai lu qu'il est difficile de savoir si un élément est dans une énumération. Alors, quel serait le meilleur moyen?Quelle est la meilleure façon de savoir si une valeur est définie dans une énumération?

Par exemple, le code suivant provient du noyau Linux 2.6.32:

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

Et celui-ci de la version 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, 
}; 

Comment voulez-vous vérifier si V4L2_COLORFX_NEGATIVE est défini? Est-ce que #ifndef V4L2_COLORFX_NEGATIVE serait correct?

Répondre

2

Vous devriez regarder une macro de compilateur dans le contexte plus large (par exemple la version de Linux, je ne sais pas ce qui est disponible) ou une autre information à la compilation. ifndef est de vérifier si les macros du compilateur sont définies, pas les symboles dans le code.

1

Vérifiez la version de linux dans /usr/include/linux/version.h (vous devez installer les en-têtes du noyau si)

il contient quelque chose comme:

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

, vous pouvez utiliser cette :

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38) 
Questions connexes