¿Puede alguien explicarme por qué se compila el siguiente código sin advertencia ni error?Función C sin comportamiento de parámetros
Espero que el compilador me advierta que la prueba de función no espera ningún argumento. Pero el código compila y ejecuta la prueba de función recursivamente.
#include <stdio.h>
#include <stdlib.h>
static void test1(int a, int b, int c) {}
static void test() {
printf("HERE\n");
test(1,2,3);
}
void main() {
test();
}
@Chris Sí. ¿Por qué? ¿Por qué cuando las personas publican aquí hacen que su código de ejemplo sea tan difícil de leer? ¿Qué hay de malo con el uso de nombres completamente diferentes para las cosas en lugar de los que son casi lo mismo? Por favor, personas, no utilicen nombres como "prueba" y "prueba1", usen nombres como "A", "B" y "C". –
Como un aparte de las respuestas que indican que un conjunto de parámetros vacío no es un prototipo en C, puede habilitar advertencias para prototipos perdidos en GCC con '-Wstrict-prototypes' y en MSVC con'/Wall/W4' . Tenga en cuenta que '-Wall' no habilita esa advertencia en GCC (no estoy seguro de por qué). –
Vaya, aprobé una edición de esta pregunta cuando quise rechazarla. –