In C, declaring a function with an empty parameter list tells the compiler that the parameters will be defined later:
#include <stdio.h>
void f(); // DECLARAMOS una función con un número aún indeterminado de parámetros.
int main(void)
{
f(1, 2, 3); // Llamamos a la función, aún sin definir, con tres parámetros.
return 0;
}
void f(int x, int y, int z) // DEFINIMOS la función para recibir tres parámetros.
{
printf("{%d, %d, %d}", x, y, z);
}
Or so I thought, it actually seems that the compiler doesn't do any parameter checking after the function is declared, since this works too:
#include <stdio.h>
void f(); // DECLARAMOS una función con un número aún indeterminado de parámetros.
int main(void)
{
f(1, 2, 3); // Llamamos a la función, aún sin definir, con tres parámetros.
f(1, 2); // Llamamos a la función, aún sin definir, con dos parámetros.
f(1); // Llamamos a la función, aún sin definir, con un parámetro.
f(); // Llamamos a la función, aún sin definir, sin parámetros.
f(1, 2, 3, 4, 5, 6, 7, 8, 9, 0); // Llamamos a la función con diez parámetros!!
return 0;
}
void f(int x, int y, int z) // DEFINIMOS la función para recibir tres parámetros.
{
printf("{%d, %d, %d}", x, y, z);
}
Not only does it not give any compilation errors, but it compiles without alarms and executes by assigning indeterminate values to unprovided variables and ignoring extra passed variables. What is happening? Shouldn't the compiler compare the function call to the function definition and cause a compile error?