int foo(){}; - просто ошибка. Здесь функция имеет пустое тело {}, а
должна возвращать int, то есть тело должно как минимум содержать {
return 0; }. Нужно различать declaration (прототип) и definition
(определение). int foo(); - прототип, точка с запятой нужна. int
foo() { return 0; } - определение, точка с запятой после } не
нужна.