>>1
Wrong. You only have to declare a function one, and define it once. Declarations go in header files, definitions in source files. A prototype is the most common form of declaration, but for functions that are only used in one file, a definition can double as a declaration.
Declaration:
void foo();
Definition:
void foo() { }
Declaration and Definition (assuming no other conflicting declarations):
void foo() { }