The C++ method is tolerable if everyone uses the stl
conventions, which is that a list is passed in as an iterator to the
start of the list and an iterator to one past the end. But the fact is
that everyone doesn't use the stl conventions. Partly it's a failure
of education, partly it's that they are hard to explain and it's
difficult to make programmers see the benefits, partly it's
historical, stl was bolted on to C++ at a late date, so people grew up
using C-style arrays instead of vectors. Whatever the reason, the
system isn't used as it should be.
Maybe putting this argument of yours in an alternate perspective would
show you how vaporous it is.
My general experience with C is that C developers don't know the first
thing about cohesion, modularizing, etc... They're all proud hackers
that peck at things until they work, without any regard to maintenance
and reuse. They base statically sized arrays on assumptions that are
far from guaranteed and do nothing to assert those preconditions.
They scatter global variables throughout their systems and write
functions that read and write to many unrelated, global concepts at
once so that it is impossible to separate the concepts into distinct
modules or put them under unit test without instantiating the entire
system. They write and use functions like 'gets' that assume things
that are quite literally impossible to check, allowing all manner of
security exploits and crash conditions; this method of thinking among
C developers is so bad they even do this in their standard library.
They use convoluted methods of error handling like singular, global
variables that can be written to anywhere along the call stack so that
it's impossible to tell which function caused the error or if the code
you're getting is even the right one...and then they use such systems
in multi-threaded architectures such that the error you get might not
even BE in the call stack anywhere.
All that and much, much, much more. In my experience, C developers
lack all discipline and design skills...and don't even see the problem
with that. Basic principles of engineering are lost on them.
I must therefore conclude that C is a bad, complex language. How
stupid am I?
Now it must be said, in non-sarcasm mode, that though the above is
indeed a true reflection of C coders I have met...I realize that it's
not the majority since the vast majority are people I've not met.
Further it's not C specific as this is the general trend I see in all
software development cultures. In my experience, good developers are
rare no matter what language they speak. Most the good ones know how
to write good code in more than one.