Comme indiqué @Krishnabhadra, toutes les réponses précédentes des autres utilisateurs ont une interprétation correcte, et je veux juste faire une analyse plus détaillée de certains points.
Dans l'ancien C comme dans l'ANSI-C, le " paramètre formel non typé ", prenez la dimension de votre registre de travail ou capacité de profondeur d'instruction (registres fantômes ou cycle cumulatif d'instructions), dans une MPU 8 bits, sera un int16, dans une 16 bits MPU et ainsi sera un int16 et ainsi de suite, dans le cas où les architectures 64 bits peuvent choisir de compiler des options comme: -m32.
Bien qu'il semble plus simple de l'implémentation à haut niveau, Pour passer plusieurs paramètres, le travail du programmeur dans l'étape de type de données de contrôle dimencion, devient plus exigeant.
Dans d'autres cas, pour certaines architectures de microprocesseurs, les compilateurs ANSI personnalisés, ont exploité certaines de ces anciennes fonctionnalités pour optimiser l'utilisation du code, forçant l'emplacement de ces "paramètres formels non typés" à fonctionner dans ou en dehors du registre de travail, aujourd'hui vous obtenez presque la même chose avec l'utilisation de "volatile" et de "registre".
Mais il faut noter que les compilateurs les plus modernes, ne font aucune distinction entre les deux types de déclaration de paramètres.
Exemples de compilation avec gcc sous linux:
Dans tous les cas, la déclaration du prototype localement ne sert à rien, car il n'y a pas d'appel sans paramètres, la référence à ce prototype sera négligente. Si vous utilisez le système avec "paramètre formel non typé", pour un appel externe, procédez à la génération d'un type de données prototype déclaratif.
Comme ça:
int myfunc(int param);