If I understand it correctly this means
extern void foo();
that the function foo is declared in another translation unit.
1) Why no
As others have already stated, the extern keyword is used to state the name (a variable or function) has external linkage, meaning the name refers to the same object in the entire program. Also, this is the default for variables and functions defined at the file scope, so this usage is superfluous.
There's another use of the extern keyword that goes like this:
extern "C" void foo();
This means the function foo will be linked using the C conventions for linkage (maybe because this is a function defined in a C library or is a function intended to be called by C programs).