Linux内核代码中使用的一种初始化数组的方法
头文件中定义数组中的内容,如果__AR未定义,则将其定义为空
1 2 3 4 5 6 7 8
| #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, #include "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