Función C sin comportamiento de parámetros

¿Puede alguien explicarme por qué el siguiente código se comstack sin una advertencia o error?

Espero que el comstackdor me advierta que la prueba de función no espera ningún argumento.

Pero el código comstack y ejecuta la prueba de función recursivamente.

static void test1(int a, int b, int c) { } static void test() { printf("HERE\n"); test(1, 2, 3); } void main() { test(); } 

En C ++, void test() declara una función que no toma parámetros (y no devuelve nada).

En C, void test() declara una función que toma un número de parámetros no especificado (pero no variable) (y no devuelve nada). Así que todas sus llamadas son válidas (según el prototipo) en C.

En C, use void test(void) para declarar una función que realmente no toma parámetros (y no devuelve nada).

Cuando declara una función con una lista de argumentos vacía, invoca la semántica de K&R (pre-prototipo) y no se asume nada sobre la lista de parámetros; esto es para que el código C pre-ANSI todavía se compile. Si desea una función de prototipo con una lista de parámetros vacía, use (void) lugar de () .