如何在编译时使用递增值来初始化c中的数组?
例如,我想初始化一个5000个整数的数组 - 我想把它初始化为[] = {1,2,.... 4999} 我不想在编译时初始化数组时编写5000个整数。
答案 0 :(得分:3)
你可以用一堆宏来做 - 它的邪恶和丑陋,我不明白为什么你想要,但是你走了:
#define V10(x) (x), (x)+1, (x)+2, (x)+3, (x)+4, (x)+5, (x)+6, (x)+7, (x)+8, (x)+9
#define V100(x) V10(x), V10(x+10), V10(x+20), V10(x+30), V10(x+40), \
V10(x+50), V10(x+60), V10(x+70), V10(x+80), V10(x+90)
#define V1000(x) V100(x), V100(x+100), V100(x+200), V100(x+300), V100(x+400), \
V100(x+500), V100(x+600), V100(x+700), V100(x+800), V100(x+900)
const int a[5000] = { V1000(1), \
V1000(1001), \
V1000(2001), \
V1000(3001), \
V1000(4001) };
答案 1 :(得分:3)
对于C,您最好的选择可能是使用外部脚本生成C代码,例如:
$ echo "unsigned int myarray[] = { $(seq -s ", " 0 9) };"
unsigned int myarray[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
您可以将其传输到专用的源文件中,并将其包含在您的代码中。
(在C ++中,由于模板魔术,你有更好的选择。)
答案 2 :(得分:2)
您无法使用C中的递增值直接初始化数组。您必须通过指定所有值或在运行时使用循环来初始化它。
答案 3 :(得分:0)
使用C中的递增值直接初始化数组是不可能的,尽管可能使用其他人提到的链接描述文件。 最好是使用for循环...... for(i = 0,i <5000,i ++) a [i] = i + 1;
答案 4 :(得分:0)
对于较小的数组,您可以这样做:
#include <stdio.h>
#define OFFSET (9 - 1) // start at line 9, -1 for 1 indexing
int main()
{
int array[] =
{
__LINE__ - OFFSET,
__LINE__ - OFFSET,
__LINE__ - OFFSET,
__LINE__ - OFFSET,
__LINE__ - OFFSET
};
for(int i=0; i<sizeof(array)/sizeof(*array); i++)
{
printf("%d ", array[i]);
}
}
但当然有5000个整数,这种方法将非常繁琐。最好的选择是从外部脚本生成C源代码。
答案 5 :(得分:0)
使用外部程序集文件初始化数据并使用C代码进行编译。您可能需要指定.data段指令。
答案 6 :(得分:-1)
为什么不这样做:
int size = 5000;
int arr[size];
int i = 1;
for(i=1; i <= size; i++)
{
arr[i - 1] = i; // Initializing each element seperately
}