On 11/20/2012 10:06 AM, Matthew Gillen wrote:
On 11/20/2012 09:37 AM, Mark Woodward wrote:
This is a pet peeve of mine. What is a C++ "purist?" C++ is a very broad
language with a lot of capabilities. The "cout" object is merely one of
those to be used or not based on need.

"Need" is often confused with preference, where preferences don't often account for the reasoning behind conventions.

For some reason, "purists" want to ignore that C++ is for all practical
purposes a set of extensions to C. Furthermore, that, for some reason,
programs must be coded entirely differently than you would C code. I
reject this mentality as something akin to "java-envy" or something.

There is nothing wrong with the various incarnations of printf. There is
no reason not to use malloc if you want. There is no reason not to use
"char *" for strings. Templates need not be used.

C++ code is that which compiles using a C++ compiler, not some
ideological construct that must be adhered too.

Except that if you mix C-style input/output and C++-style input/output, bad things can happen. If you mix C-style malloc with C++-style "new", bad things can happen. The compiler generally assumes you know what you're doing if you mix C and C++ idioms, and so it won't protect you from shooting yourself in the foot.
Well, "nothing" can protect you from shooting yourself in the food if you are properly armed. Mixing any dissimilar things have bad consequences. Choosing one or the other is often best, but there is no requirement that you use one over the other either.

So strictly speaking, you're right, there's nothing wrong with using printf in a C++ program. But you better either not use any C++ cout-style statements on that same stream, or you better know what you're doing (e.g. did you make all the calls to sync_with_stdio() in the right place? What, didn't know about that function? Good luck with portability...).
Well, it is easy to construct bad code. Some people do it without thinking :-)

Likewise with malloc vs. new: they are NOT freely interchangeable. Managing a C++ class with 'new/delete' will ensure that constructors/destructors get called. Managing that same object with malloc/free does not invoke constructor/destructor pairs, it merely allocates memory. Furthermore, there is no guarantee that the way 'new' and 'malloc' manage memory is compatible; e.g. you could have issues if you 'new' and object and then 'free' it, or 'malloc' and object then 'delete' it.
New/delete are interesting. Typically, a pointer returned by "new" can be freed by "free," however, new and delete involve the constructors and destructors.

So instead of chasing noob programmers around and beating them over the head with all these subtle bugs that only manifest themselves on certain systems, it's a lot easier to just make the rule: stick with one set of idioms.
noob programmers should be using logo. :-)

I have a garage full of tools. Each one has a purpose. The ones that are most useful are the ones that, if used improperly, do the most damage. Working with tools that try to keep me from hurting myself also make it harder for me to do the job.


Matt
_______________________________________________
Hardwarehacking mailing list
[email protected]
http://lists.blu.org/mailman/listinfo/hardwarehacking

_______________________________________________
Hardwarehacking mailing list
[email protected]
http://lists.blu.org/mailman/listinfo/hardwarehacking

Reply via email to