Entendendo a diferença entre f () ef (void) em C e C ++ de uma vez por todas
Ok, então eu ouvi diferentes opiniões sobre este assunto e apenas quero ter certeza que entendi corretamente.
Para C ++Declaraçõesvoid f();
evoid f(void);
significa precisamente a mesma coisa, a funçãof
não aceita nenhum parâmetro. Idem para definições.
Declaraçãovoid f(void);
significa quef
não aceita nenhum parâmetro.
Declaraçãovoid f();
significa que a funçãof
pode ou não ter parâmetros, e se isso acontecer, não sabemos que tipo de parâmetros são esses, ou quantos deles existem. Note que não é o mesmo que reticências, não podemos usarva_list
.
Agora aqui é onde as coisas ficam interessantes.
Caso 1Declaração:
void f();
Definição:
void f(int a, int b, float c)
{
//...
}
Caso 2Declaração:
void f();
Definição:
void f()
{
//...
}
Questão:O que acontece em tempo de compilação nos casos 1 e 2 quando ligamosf
com os argumentos corretos, argumentos errados e nenhum argumento? O que acontece no tempo de execução?
Se eu declararf
com argumentos, mas defini-lo sem eles, isso fará diferença? Devo ser capaz de abordar os argumentos do corpo da função?