I'm not certain that either dialect of C, C++ or Objective C, is a smooth transition to OO software construction. If THAT were my goal, then I would either investigate Eiffel or Java (or, if I didn't mind learning a new language, Smalltalk).<br><br>On Linux there exist SmallEiffel, Java (various dialects), and Squeak as examples of each of these choices.<br>If your goal is merely to broaden your programming experience in a language that contains OO constructs, then the obvious choice is C++. C++ doesn't coerce you into doing OO programming. It is rather like Ada95 in that it allows you to do OO software rather than coercing you. A slow transition to C++ is quite easy, the problem is mapping a course that would lead you to the appropriate destination, and I'm not clear where you are headed, so that's a bit difficult. <i>Still...</i><br>A first step would be to include prototypes for all function calls. With the argument types specified.<br><br>A second step is, wherever possible, replace the <u>#define</u> statement with a <u>const</u>. This allows the compiler to do better error checking.<br>Then one should probably use array indexing rather than pointer arithmetic to the extent possible. (And <b>try</b> to make it complete! That pointer arithmetic is a source of <i>many</i> errors.)<br><br>Beyond that... well it depends on where you are heading. I think that very few folk know the full C++, so you just learn the pieces near what you are interested in as you go. But think about replacing casts with typesafe casting as a possible next step. Type casting always makes me itchy, but typesafe casting "feels" much better.<br>Of course, if you wish to get into OO software, then you will need to learn about the class construct. Basically it's simple, but it ramifies! <br><br>Templates bother me. They are so useful. And they can cause SUCH code bloat! If you have money to invest, look for a linker that strips out dead (unused) code. The gnu compiler is nice to have, but I've seen several comments indicating that it is less than perfectly optimizing.<br><br>Of course, if you <i>do</i> use the gnu C++ compiler, then you don't need to choose between C++ and Objective C, as the same compiler can handle both. I'm not experienced, but I believe that the Objective C language has seen less development in the last decade. OTOH, it is supposed to be more "dynamic", where C++ is supposedly entirely static at run-time. Which is more advantageous depends on what you want to do, but if you lean toward Objective C, I would recommend that you look at Python before you decide.<br>