在 C (不是 C++)中,我尝试创建两个包含相同值的字符串表,但以两种不同的方式对值进行排序。而且我不希望字符串在内存中重复。
基本上,我想做以下事情。除了根据 gcc 之外,它会失败,因为第二个数组初始化中的“初始化器元素不是常量”。有办法解决这个问题吗?最好不要说“哦,编译器应该优化它来做你想做的事”?
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 答案。