1

我试图通过将一个变量插入多个数组来减少我的文件行。所以我想要一个字符串,或者一个数组变量,如下所示:

new combomeals[] = { 
    3025101, 3025100, 3003000, 3025002, 3030101, 3025001, 3025000, 3021602, 3031402, 3020100, 
    3031401, 3031400, 3031302, 3020242, 3031301, 3031300, 3021702, 3021701, 3021700, 3020602, 
    3021601, 3030100, 3021600, 3021502, 3021501, 3020201, 3021500, 3020150, 3020502, 3020501, 
    3020500, 3001802, 3001801, 3001800, 3001702, 3001701, 3001700, 3011602, 3011601, 3011600, 
    3011502, 3020202, 3011501, 3011500, 3011232, 3011231, 3011202, 3011201, 3010602, 3010601, 
    3010600, 3010902, 3010901, 3010900, 3011102, 3011101, 3011100, 3011002, 3011001, 3011000, 
}

它实际上比这要长得多,但我为了解释而缩短了它……我想把 combomeals[] 放到其他数组中。以下方法不起作用,但您会明白的:

new first_array[] = { 
    1, 
    2, 
    3,
    combomeals[], 
}

new second_array[] = { 
    4, 
    5, 
    6,
    combomeals[], 
}

new third_array[] = { 
    7, 
    8, 
    9,
    combomeals[], 
}

最终目标是将第一个数组放入其他几个数组中。请让我知道这是否有意义以及您是否能够提供帮助!

谢谢!

4

1 回答 1

3

您不能以您尝试的方式扩展数组。假设new已将其别名为整数类型,则编译器将仅接受初始化列表,first_array如果列表中的所有元素都是相同类型。但是列表的最后一个元素是语法错误,就像combomeals数组一样,combomeals[]不属于初始化列表。

对于second_array和 也是如此third_array

您可以通过将数字combomeals放入宏中来完成类似的操作:

#define COMBOS \
3025101, 3025100, 3003000, 3025002, 3030101, 3025001, 3025000, 3021602, 3031402, 3020100, \
3031401, 3031400, 3031302, 3020242, 3031301, 3031300, 3021702, 3021701, 3021700, 3020602, \
3021601, 3030100, 3021600, 3021502, 3021501, 3020201, 3021500, 3020150, 3020502, 3020501, \
3020500, 3001802, 3001801, 3001800, 3001702, 3001701, 3001700, 3011602, 3011601, 3011600, \
3011502, 3020202, 3011501, 3011500, 3011232, 3011231, 3011202, 3011201, 3010602, 3010601, \
3010600, 3010902, 3010901, 3010900, 3011102, 3011101, 3011100, 3011002, 3011001, 3011000,

new combomeals[] = { COMBOS };

new first_array[] = { 1, 2, 3, COMBOS };
new second_array[] = { 4, 5, 6, COMBOS };
new third_array[] = { 7, 8, 9, COMBOS };

如果您的编译器在处理较长的源代码行时遇到问题,您可能不得不COMBOS分开。它不太方便,但c89只需要编译器支持长度为 509 字节的源文件。

#define COMBOS1 \
3025101, 3025100, 3003000, 3025002, 3030101, 3025001, 3025000, 3021602, 3031402, 3020100, \
3031401, 3031400, 3031302, 3020242, 3031301, 3031300, 3021702, 3021701, 3021700, 3020602, \
3021601, 3030100, 3021600, 3021502, 3021501, 3020201, 3021500, 3020150, 3020502, 3020501
#define COMBOS2 \
3020500, 3001802, 3001801, 3001800, 3001702, 3001701, 3001700, 3011602, 3011601, 3011600, \
3011502, 3020202, 3011501, 3011500, 3011232, 3011231, 3011202, 3011201, 3010602, 3010601, \
3010600, 3010902, 3010901, 3010900, 3011102, 3011101, 3011100, 3011002, 3011001, 3011000

new combomeals[] = {
    COMBOS1,
    COMBOS2,
};

new first_array[] = {
    1, 2, 3,
    COMBOS1,
    COMBOS2,
};

/* ...etc... */

如果您的 C 编译器不符合标准,您可能需要进一步分解这些行。

于 2013-06-14T20:27:40.210 回答