在C(非C++)中,我试图创建包含相同值的两个字符串表,但是这些值以两种不同的方式排序。我不想在记忆中重复这些字符串。
基本上,我想做以下工作。除了根据gcc,它失败是因为在第二个数组初始化中“initializer元素不是常量”。有办法解决这个问题吗?最好不要说“哦,编译器应该优化它来做你想做的事”?

static const char * monthNames[] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};


/********
 * Month table sorted for O(log N) string lookup
 */
static const char * monthSortedKeys[]= {
  monthNames[3],          /* Apr */
  monthNames[7],          /* Aug */
  monthNames[11],         /* Dec */
  monthNames[1],          /* Feb */
  monthNames[0],          /* Jan */
  monthNames[6],          /* Jul */
  monthNames[5],          /* Jun */
  monthNames[2],          /* Mar */
  monthNames[4],          /* May */
  monthNames[10],         /* Nov */
  monthNames[9],          /* Oct */
  monthNames[8]           /* Sep */
};

澄清:我知道如何做循环。我正在试图找出如何在编译时完成它。
另一个更新:我刚把它编译成C++(g++),它工作。不过,我还是在找C答案。

最佳答案

示例代码段:

static const char
    JAN[] = "Jan",
    FEB[] = "Feb",
    // ...
    DEC[] = "Dec";

static const char *const monthNames[] = {
  JAN, FEB, /* ... */ DEC
};

static const char *const monthSortedKeys[]= {
    /* APR, ... */ DEC, /* ... */ FEB, JAN /* ... SEP */
};

关于c - 棘手的数组初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8100470/

10-10 08:01