【问题标题】:Enumerated array in CC中的枚举数组
【发布时间】:2013-01-07 10:22:53
【问题描述】:

我需要让一个数组像枚举一样工作,我可以在初始化期间更改数组中元素的索引位置。例如,我们可以有一个枚举

enum Fruit_t {
APPLES,
ORANGES,
STRAWBERRIES = 8 }

这里,草莓从 2 个变成了 8 个。这可以用数组代替吗,可以改变位置吗?这在C中可能吗?如果是,请问怎么做?

任何其他可能的建议将不胜感激

让我解释一下我的意图

我正在使用一个函数指针数组

static BT (*data_access_typ [4])() =
{ 

    NULL,
    ARRAY,  
    STRUCT,
    dnt_cr

};

我需要调用这个函数

(access_data[*VAL])()

其中 *VAL 可以是此枚举中的任何值

enum data_access_typ    {
                        Null, array, struc, bool, bit_str, int32, unsin32, float_pt, oct_str=9, vis_str,
                        bcd=13, int8=15, int16, unsin8, unsin16, int64=20, unsin64, _enum, float32, float64,
                        date_tim, date, time, dnt_cr=225
                    };

如果值是 NULL、ARRAY、STRUCT,直到 dnt_car (255),则需要执行单独的函数,但我不需要所有类型。只有几个 5 或 6 个功能。所以我真的不打算使用枚举(仍在试图弄清楚如何让它为我想做的事情工作)。

我想要做的是,*VAL 的值决定了在函数指针数组中调用哪个函数,其索引应该对应于假定枚举中的值。

例如,

(access_data[*VAL])()

从上面的代码中,它只会在 *VAL 为 3 时调用 dnt_cr 函数,但我想要的是在 *VAL 为 225 时调用 dnt_cr。

我希望这很清楚......

【问题讨论】:

  • 你的意思是你想要像 `int a[5] = {,,3,4,} 这样的东西来只初始化第三个和第四个元素吗? (是的,我知道它不是有效的代码,但这是我试图澄清的想法)。
  • @WhozCraig 请看看我上面的编辑。我做了进一步的解释。
  • @WhozCraig 看着 `int a[5] = {,,3,4,}。如何实现?

标签: c arrays enums


【解决方案1】:

C99+:

int a[6] = { [4] = 29, [2] = 15 };

此语法在 C89 模式下也可用作 gcc 扩展。

【讨论】:

  • @WhozCraig,我对从 C++ 转移而来的所有 C 内容非常陌生。其中一些看起来很酷,而另一些看起来在 C++ 环境中非常多余。
  • @PaulA。他们说他们是ANSI兼容的。您只需要提醒他们 ANSI 已采用 C11 作为其 C 标准,而且他们落后了 23 年。
  • 请再次查看我在问题中的编辑。我确实解释了我的意图。
猜你喜欢
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多