Then again we have coding standards
and good principles, like the
Principle of Least Surprise. When applied to source code statements, it simply means that Thou Shall Not Use Ambiguous Statements.
In my own example code, you see this in e.g. "superfluous" quotes that help humans see exactly the intent of the statement, and how I use
static inline for accessors and helpers even though plain
static has the exact same behaviour in C.
Ambiquity has surprisingly high maintenance cost. Since in C the name of a function is equivalent to a pointer to that function (i.e.,
strlen == &strlen), one should avoid ambiquity in variable and function naming. The one division that makes sense to me is type names having a different "namespace" than variable and function names in C, because they are unambiguous in expressions. In C++, however, as JPortici showed, they can be ambiguous (in the example, class name vs. variable).
(My point being, because I apply the Principle of Least Surprise, I often do have variables with the same name as their type in C, but carefully try and avoid that in C++ and Python [especially wrt. class names and variable names]. In Python, I prefer to use Capitalized names for classes, and member and variable names beginning with a lowercase letter, for this particular reason; adjusting my "preferred style" to minimize ambiquity.)
For this reason, I like to investigate the reasons behind the choices in various coding styles and standards. It is illuminating.