(And yes, the standard library is full of bad examples.)
Regarding the standard library and case of letters:
IIRC, the names of entities in both ISO/IEC 9899:1999 (E) and
ISO/IEC 14882:2003(E) are written with lowercase letters only,
unless they designate a macro.
One exceptions are the names of some standard functions in C:
the implementation is allowed to implement them as a macro,
but still they are written in lowercase letters only.
(»Any function declared in a header may be additionally
implemented as a function-like macro«,
ISO/IEC 9899:1999 (E), 7.1.4)
Another example are recent additions to C: »_Bool«,
»_Complex«, »_Imaginary«. I believe that this is the first
time, a C standard includes mixed case identifiers.
I am not aware of such identifiers in ISO/IEC 14882:2003(E).
The classical application of C is Unix system programming,
and, IIRC, the classical Unix sources I have seen use
lowercase letters only.
The first time I saw mixed case identifiers (like »WriteLn«)
was in Pascal (where case is not significant), and then on
code for Apple's Lisa, which was Pascal-based IIRC. When C
compilers became available for the Macintosh they had to use
the mixed case system calls, too. Possibly this was the way
mixed case identifiers crept their way into C (and, later,
C++) programming.
Since I believe to remember to have grown up with
lowercase-only identifiers in C, they still look the most
beautiful to me in the context of C.
The classical style I remember uses underscores to separate
words (»print_formatted«), but names like »printf« where used
for global identifiers because some linkers only supported up
to six significant identifiers.
One can look at classical source code by Bjarne Stroustrup:
http://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_e/src/cfront.pdf
It contains an identifier made of two english words without an
underscore »morecore«. It also contains mixed-case
identifiers, like »NFn« or »Nfree«.
Donald E. Knuth has consistently avoided both word separators
and uppercase letters in identifiers in the surface of TeX,
even in long names such as »exhyphenpenalty«,
»tracinglostchars«, »tracingparagraphs«, »thickmuskip«,
»rightleftharpoons«, »scriptscriptfont«, or
»normalbaselineskip«.
The English language uses /open/ compounds, like »school bus«,
while German uses /closed/ compounds, like »Schulbus«. But
still, sometimes, even in English words can merge to form a
new closed compound, like »schoolbus«. To quote Donald E. Knuth:
»Newly coined nonce words of English are often spelled
with a hyphen, but the hyphen disappears when the words
become widely used. For example, people used to write
"non-zero" and "soft-ware" instead of "nonzero" and
"software"; the same trend has occurred for hundreds of
other words. Thus it's high time for everybody to stop
using the archaic spelling "e-mail". Think of how many
keystrokes you will save in your lifetime if you stop now!
The form "email" has been well established in England for
several years, so I am amazed to see Americans being
overly conservative in this regard.«
http://www-cs-faculty.stanford.edu/~knuth/email.html
When trying to answer the question which naming scheme to use,
I would look up authoritative sources, such as example code
from ISO/IEC 14882:2003(E), example code in Books of Bjarne
Stroustrup, the C++ standard library itself, or boost, and see
how it is done there.