Comprender la diferencia entre f () yf (vacío) en C y C ++ de una vez por todas
Ok, entonces he escuchado diferentes opiniones sobre este tema y solo quiero asegurarme de que lo entiendo correctamente.
Para C ++Declaracionesvoid f();
yvoid f(void);
Significa precisamente lo mismo, la función.f
No toma ningún parámetro. Lo mismo ocurre con las definiciones.
Declaraciónvoid f(void);
significa quef
No toma ningún parámetro.
Declaraciónvoid f();
significa que la funciónf
puede o no tener parámetros, y si los tiene, no sabemos qué tipo de parámetros son, o cuántos hay de ellos. Tenga en cuenta que NO es lo mismo que los puntos suspensivos, no podemos usarva_list
.
Ahora aquí es donde las cosas se ponen interesantes.
Caso 1Declaración:
void f();
Definición:
void f(int a, int b, float c)
{
//...
}
Caso 2Declaración:
void f();
Definición:
void f()
{
//...
}
Pregunta:¿Qué sucede en tiempo de compilación en los casos 1 y 2 cuando llamamos?f
¿Con los argumentos correctos, argumentos erróneos y sin argumentos en absoluto? ¿Qué sucede en el tiempo de ejecución?
Si declarof
con argumentos, pero defínalo sin ellos, ¿hará una diferencia? ¿Debo poder abordar los argumentos del cuerpo de la función?