Dari sys.c baris 123:
void *sys_call_table[__NR_syscalls] =
{
[0 ... __NR_syscalls-1] = sys_ni_syscall,
#include <asm/unistd.h>
};
sys_call_table
adalah penunjuk umum ke array, saya bisa melihatnya. Namun apa notasinya:
[0 ... __NR_syscalls-1]
Apa itu ...
?
EDIT:
Saya belajar trik C lain di sini: #include <asm/unistd.h>
akan diproses sebelumnya dan diganti dengan isinya dan ditugaskan ke [0 ... _NR_syscalls-1]
.
void (*sys_call_table)[__NR_syscalls]
char *argv[]
. Tetap.Jawaban:
Ini adalah inisialisasi menggunakan Designated Initializers .
Inisialisasi berbasis rentang adalah ekstensi gnu gcc.
Ini tidak portabel. Menyusun dengan
-pedantic
memberi tahu Anda begitu.Bagaimana cara kerjanya di sini?
Preprocessor menggantikan
#include <asm/unistd.h>
dengan konten aktualnya ( mendefinisikan berbagai jenis dan konstanta simbolik, dan mendeklarasikan fungsi lain-lain ) dalam konstruksi berbasis rentang, yang kemudian digunakan lebih lanjut untuk menginisialisasi array pointer.sumber