Why should you avoid using C in C++?

May 29, 2013 at 10:50pm
I can see why using the standard library is clearly better but how come when some people are used to C people will explicitly tell them to use the C++ equivalent. One example of his is like #define vs const.
Last edited on May 29, 2013 at 10:51pm
May 29, 2013 at 10:53pm
Most of the time it will come down to the style guide that has been implemented at that organisation.
May 30, 2013 at 12:37am
Sometimes it's more logical to do it in C++, but I believe it's rather illogical to purposefully avoid using C even if it seems preferable in certain situations.
May 30, 2013 at 2:39am
C is a different language. Many of C constructs and idioms that compile in C++ do not interact all that well with normal C++ code. Of course there are exceptions (some syntax is truly shared, some C idioms are useful in C++), but to use your example, #define used instead of a named constant (which C lacks) tramples all over C++'s scoping rules. Not to mention debugging difficulties, etc.
May 30, 2013 at 2:48am
I think that c lacks classes also
May 30, 2013 at 2:57am
I think it's more of a thing where you shouldn't use C because C++ purposefully found a better solution. When using a C++ compiler chances are you should use const rather than #define . There's plenty of utilities I see used in C++ that came from C though. I could be wrong, but it seems that those who start in C++ eventually get better at coding and are more ready to use C in their code. If people like to accuse C++ of being dangerous though, well C is just as ( and to some more) tedious. I don't use C a whole lot but I have found it useful from time to time. I know a guy who's a hobbyist game programmer though, and he uses A LOT of C, even though he started out in C++.
Last edited on May 30, 2013 at 2:57am
May 30, 2013 at 5:03am
C code was implemented in C++ just to ease moving C programs into C++.

if it's not used for this purpose then it's bad programming practice.
nowadays, new C++ compilers don't accept some C code in them.

uhh nuts, who am i kidding, i actually use some C code in my programs.
if the exit() function is actually C-function, then i will always be using C in my C++ projects, and i use lots of C-functions simply because i need them.

please don't consider this a misleading comment.
Last edited on May 30, 2013 at 5:04am
May 30, 2013 at 7:33am
C++ can be dangerous if you dont know what you're doing. C is "worse" in that respect.
May 30, 2013 at 12:42pm
closed account (ypfz3TCk)
Well if you use c syntax in a C++ source file it is bad style. Someone looking at it will expect to see c++ code! Your program might therefore be harder to understand if other people are going to be looking at the code.
On the other hand if you write a program for yourself then you can use whatever syntax pleases you - so long as it can be compiled. But the question is why say a program is c++ if it really is c?

I have seen c++ programs where people have used scanf & printf and c headers instead of the c++ cout & cin. There is no good reason to do that and call it a c++ program - when in reality it is a c program in a c++ shell.
May 30, 2013 at 5:33pm
In regards to the use of #define and const, defines run the risk of adding hard to find bugs into you program due to them not having a type. It is better practice to use const instead due to them having a type.

In regards to not being able to use C in C++, when did this happen? They converted all the C libraries to C++ equivalents. So now instead of including stdlib.h C++ has you do #include <cstdlib> 1.

Avoid C in C++? That is an oddity question depending on who you ask. There are still a lot of programmers that think you have to learn C before ever learning C++. Then you have those who say never touch C before C++, but rather learn C later. Just depends on what you want I supposed.
_______________________________________
1. http://www.cplusplus.com/reference/
Last edited on May 30, 2013 at 5:38pm by closed account z6A9GNh0
May 31, 2013 at 2:56am
if the problem is only with the #define and const, actually a const is better to make constants that will actually be USED in you program, but define is still usable in conditional compilation.
i actually have this style in programming: i write an algorithm, then decide its bad, so i delete it.
a few hours later i discover that the algorithm really needs just a little modification, and it becomes perfect, then i have to write the whole algorithm again.
with conditional compilation, i just enclose the algorithm in such line:
1
2
3
4
5
#ifdef _FIRST_WAY
algorithm
#else
rest of the program
#endif 

this way, i don't have to delete the algorithm, just exclude it from compiling.
i think this is a good usage of C syntax.

if i'm wrong with something, please show me the right way.
May 31, 2013 at 3:16am
@Rechard3: version control systems can help with that kind of thing without cluttering your source with deprecated code. Also I think using block comments /*...*/ would be better than using #ifdef s
May 31, 2013 at 6:11am
noted.
thanks for the advice Lachlan Easton
Topic archived. No new replies allowed.