C trampas y escollos 2.1 Pensé que 0 siempre es una dirección no válida. ¿Cómo podría él poner una función en esa posición?
Es dependiente de la architecture.
Del libro:
Una vez hablé con alguien que estaba escribiendo un progtwig en C que se ejecutaría de forma independiente en un pequeño microprocesador ( responda aquí ). Cuando esta máquina estaba encendida, el hardware llamaba a la subrutina cuya dirección estaba almacenada en la ubicación 0. Para simular el encendido, tuvimos que diseñar una statement en C que llamara a esta subrutina explícitamente. Después de pensarlo un poco, se nos ocurrió lo siguiente:
(*(void(*)())0)();
Para los microprocesadores / microcontroladores, tiene acceso directo a cualquier RAM / Flash Address a menos que esté prohibido en el hardware. Por lo tanto, acceder a la dirección 0
en el microprocesador es completamente válido.
Creo que (* (void (*)()) 0)
significa que está intentando invocar una función que se encuentra en la memoria en la dirección 0x00000000
( que probablemente sea una dirección no válida )
Una pregunta muy similar sobre stackoverflow ¿Qué significa esta statement C? puede ayudar