Nope, sorry, not true. Parameter names never conflict with identifiers in any other scope.
They conflict with macros. Users are allowed to define macros before including standard library headers, and often do. I'm not familiar with GNU C coding standards, so you may have a point that __len should be _Len according to that, but as far as the C standard and POSIX care, either is fine.
Which would be fine, except that the glibc man pages don't say which functions are from which standard,
glibc doesn't include man pages, so firstly, your complaint isn't with glibc, and secondly, the ones on my system, as provided by man-pages, do. For example, from `man send`:
CONFORMING TO
4.4BSD, SVr4, POSIX.1-2001. These function calls appeared in 4.2BSD.
POSIX.1-2001 only describes the MSG_OOB and MSG_EOR flags. The MSG_CONFIRM flag is a Linux extension.
If a function comes from 4BSD but was later adopted by POSIX and SUS, what do you define?
If you're writing in the POSIX subset of glibc, you define the POSIX macro.
If you define the POSIX macro, then you may find that you've suddenly hidden a load of other things that were working correctly.
So you're not limiting yourself to POSIX anyway, and the problem isn't glibc's POSIX support, it's how to combine POSIX with glibc extensions.
There are some really fun cases where no combination of the public macros expose all of the features that you want and you need to define some of the glibc internal ones.
_GNU_SOURCE should make everything from glibc available. What are you using that isn't exposed by this macro?