Разница между объявлением и прототипом в основном в C, где следующее объявление не является прототипом:
int foo();
Обратите внимание, что это отличается от:
int foo(void);
последний является прототипом для функции, не имеющей аргументов, тогда как первый является объявлением для функции, типы аргументов которой не указаны в объявлении.На самом деле это может быть полезно, чтобы избежать приведения типов указателей на функции с определенным использованием указателей на функции, но это очень легко испортить, а путаница вызывает непредсказуемое поведение.Многие программисты на Си считают объявления, не являющиеся прототипами, вредными, и gcc имеет параметр предупреждения, чтобы пометить их.