(1) isn't a redefinition, it's a forward declaration.
(2) There only needs to be one. I don't know why you expect any more. I supposed it's possible that a given compiler might produce more than one, but why? and it would figure pretty high on their bug list if it did.
(3) See (2).