了解枚举值是否定义的最佳方法是什么?

时间:2011-10-14 06:11:02

标签: c enums

我读到很难找出元素是否在枚举中。那么最好的方法是什么?

例如,以下代码来自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 个答案:

答案 0 :(得分:2)

您必须在更广泛的上下文中查看编译器宏(例如linux的版本,我不知道可用的内容)或编译时的其他一些信息。 ifndef用于检查是否定义了编译器宏,而不是代码中的符号。

答案 1 :(得分:1)

检查/usr/include/linux/version.h中的linux版本(你需要安装内核头文件)

它包含类似的内容:

#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 )