Quote Originally Posted by taazz
Considering that they are a good example of bad code using them constitutes a bad habit
Sure, but I don't see your justification as to why they are "bad code" to begin with. Merely stating an opinion does not make it fact.

Quote Originally Posted by taazz
Unintelligent design is because in order to have those working you have to alter the compiler to recognize them in which case you should have added some intelligent optimization instead of introducing oddities like that.
But they are not odd: they are syntactic sugar that express the intention more clearly and succinctly. That they used to have a part in optimisation is secondary and hence a red herring where programming language design is concerned.

Quote Originally Posted by taazz
they are as clear as an algebraic symbol. If you know what it does its clear if you do not its not, in contrast with i = i+1 which is always clear regardless if you know c/c++ or not.
No, it isn't: I have an old school mate who kept stumbling with simple expressions such as i = i + 1 because it simply does not make sense in algebra: i is never equal to i + 1. In other words, the reader has to understand that "=" means "assign", and if so, it is not a stretch to understand that "+=" means "add then assign".

Quote Originally Posted by taazz
the first version of this function was written in asm and it was a direct call to the inc instruction instead of add with an instruction to move the incoming value to the output register the next version added some overflow checking as well. In modern compilers with better optimization it was converted to allow the compiler to optimize it and left there for compatibility reasons.
Hmm... but if it is a function rather than a macro, how did you get away with not passing a pointer?