An identifier can be declared as often as you want (statement 1)
anin C++ just prevents the function declarations from
showing up more than once in a single source file (statement 2)
Yes, you can declare (but not define) a function multiple times in a single translation unit. And yes, include guards usually prevent this, but that is not their only purpose. Headers often define classes, templates, and inline functions; the header guard is needed to prevent multiple definitions of those entities from appearing in a single translation unit. Header guards also help prevent an exponential blowup in the number of times a header gets pasted into a translation unit.