newton - que significa nm
¿Qué significa[N... M] en los inicializadores agregados C? (1)
Es la inicialización usando Inicializadores Designados .
La inicialización basada en rango es una extensión gnu gcc.
Para inicializar un rango de elementos con el mismo valor, escriba
[first ... last] = value
. Esta es una extensión de GNU. Por ejemplo,
int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
No es portátil. Compilando con -pedantic
con decírtelo.
¿Cómo funciona aquí?
El preprocesador reemplaza #include <asm/unistd.h>
con su contenido real ( define constantes y tipos simbólicos misceláneos y declara funciones misceláneas ) en la construcción basada en rango, que luego se usa para inicializar la matriz de punteros.
Desde la línea 123 de sys.c :
void *sys_call_table[__NR_syscalls] =
{
[0 ... __NR_syscalls-1] = sys_ni_syscall,
#include <asm/unistd.h>
};
sys_call_table
es un puntero genérico para matrices, puedo ver eso. Sin embargo, ¿cuál es la notación?
[0 ... __NR_syscalls-1]
¿Qué es ...
?
EDITAR:
Aprendí otro truco C aquí: #include <asm/unistd.h>
será preprocesado y reemplazado por su contenido y asignado a [0 ... _NR_syscalls-1]
.