C 数组初始化

Linux内核代码中使用的一种初始化数组的方法

头文件中定义数组中的内容,如果__AR未定义,则将其定义为空

1
2
3
4
5
6
7
8
/* 头文件 array.h */
#ifndef __AR
#define __AR(x, y)
#endif

__AR(1, -1)
__AR(2, -2)
__AR(3, -3)

初始化数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

#undef __AR
#define __AR(n, val) [n] = val,
int main()
{

int i;
int a[10] = {
[0 ... 9] = -1, // 初始化为-1
#include "array.h" // 按照array.h中定义的内容进行初始化
};


for (i = 0; i < 10; ++i)
printf("a[%d]=%d, ", i, a[i]);
return 0;
}

输出结果:

a[0]=-1, a[1]=-1, a[2]=-2, a[3]=-3, a[4]=-1, a[5]=-1, a[6]=-1, a[7]=-1, a[8]=-1, a[9]=-1

参考内核源码(编译后):

  • linux/arch/x86/include/generated/asm/syscalls_32.h
  • linux/arch/x86/entry/syscall_32.c