I read that identifiers should not start with an underscore in order to
prevent LINKAGE problems.
The strongest argument is that there are rules in the standard
that in a nushell say such names are only available for implementors,
in other words, for your compiler or library vendor.
I am not familar with this concept of "linkage",
so can someone provide a simple explanation?
Generally speaking, linkage applies to names of entities and
is one mechanism whereby implementations can disabmiguate their use.
In particular, when it needs to resolve where to uses of a name
refers to the same name. For instance, in external linkage,
the use of a "global" name in one translation unit (say a source file)
is considered to be the same name used in another translation
unit that will be linked together. It ties into scope and some
other things too. There is also static linkage and no linkage.
You should get a good C++ text and check out the section that
apply to this topics you raise in this email. Check out
http://www.comeaucomputing.com/booklist as one starting point.