Conforme afirmado @Krishnabhadra, todas as respostas anteriores de outros usuários têm uma interpretação correta e eu só quero fazer uma análise mais detalhada de alguns pontos.
No Old-C, como no ANSI-C, o " parâmetro formal sem tipo " leva em consideração a dimensão do seu registro de trabalho ou a capacidade de profundidade das instruções (registros de sombra ou ciclo cumulativo de instruções), em uma MPU de 8 bits, será um int16, em 16 bits. MPU e assim será um int16 e assim por diante, no caso de arquiteturas de 64 bits podem optar por compilar opções como: -m32.
Embora pareça uma implementação mais simples em alto nível, para passar vários parâmetros, o trabalho do programador na etapa do tipo de dados de controle de dimensão torna-se mais exigente.
Em outros casos, para algumas arquiteturas de microprocessadores, os compiladores ANSI customizados utilizaram alguns desses recursos antigos para otimizar o uso do código, forçando a localização desses "parâmetros formais não digitados" para trabalhar dentro ou fora do registro de trabalho, hoje você obtém quase o mesmo com o uso de "volátil" e "registrar".
Mas deve-se notar que os compiladores mais modernos não fazem distinção entre os dois tipos de declaração de parâmetros.
Exemplos de uma compilação com o gcc no linux:
De qualquer forma, a declaração do protótipo localmente não é útil, porque não há chamada sem parâmetros, a referência a este protótipo será negligente. Se você usar o sistema com "parâmetro formal sem tipo", para uma chamada externa, continue gerando um tipo de dados declarativo de protótipo.
Como isso:
int myfunc(int param);