开发者

Is there anything special I need to do to use C code in my C++ program?

Note: I am using g++ version 4.3.4 to compile my C++ code.

So far, whenever I've wanted to use C style language elements in my code it seems that I can just include the C stuff mixed in and alongside my C++.

I know C++ is mostly backwards compatible with C... so I guess my questions are these:

What parts of C are not forwards compatible with C++?

Will professional programmers laugh at me if I continue to naively stick C stuff into my C++ code?

What is the proper way to have C and C++ code in the same .cpp file?

Can I continue to use g++ to compile my hybrid code?

For this ques开发者_如何学Ction, I am mostly concerned with a solution that deals with a single .cpp file and a single g++ command to compile it. I don't really care about linking stuff at this point.


Picking out a couple of questions:

"What is the proper way to have C and C++ code in the same .cpp file?" "Can I continue to use g++ to compile my hybrid code?"

If you want to mix C-style C++ in the same file as regular C++, just go ahead and do it. You can trust the compiler to pick up any issues - they will be minimal and not affect the structure. By the sound of it, you are not interested in getting C-linkage for its own sake, so even if the C-Code is in its own file, compile it as C++. As a matter of fact this is often done as a way of migrating from C to C++.

If you take this approach, your code is not truly hybrid C/C++. It is C++ with some of the code using C-style procedural idioms. C++ is fully intended to support this.

"Will professional programmers laugh at me if I continue to naively stick C stuff into my C++ code?"

It depends where you are using it and why. Well structured C code is good code. Sometimes C+ is much better than C at particular problems. Think hard before using C-style dynamic memory management. You will deserved to be laughed at if you use raw malloc()/free() and get it wrong.

I suggest that if you embark on this approach, you might later take the time to look back and consider whether or not you would have been better to use C++ idioms instread of procedural C.


A big gotcha with linking C and C++ code is that the C++ compiler needs to know that it is linking against functions that use the C calling conventions instead of the C++ calling conventions. To that end, you often have to wrap your C header files in something like this:

#ifdef __cplusplus
extern "C" {
#endif

... C function declarations here ...

#ifdef __cplusplus
}
#endif

For lots of details, see the C++ FAQ.


C++ is almost a superset of C. Therefore, pretty much any feature you can use in C is valid in C++ (but not the other way around).

People might laugh at you for coding some stuff like you would in C, but ignore them. I don't think it's naive, but that may make me naive. I can't tell.

There is no [real] way to seperate C and C++ code in the same file. It just goes with each other, because when you compile it as C++, it's not C any more. So "C alongside C++" is not really the way to think about it.

The only difference between thing in C that would keep code from compiling as C++ that I am aware of (besides C++ having more keywords) is the issue with void*s. In C, they will implicitly cast to any pointer type, but in C++, you have to have an explicit cast to cast them to another pointer type. There might be others, but I don't know them.

Oh, also, C++ doesn't support "default int". I don't know if it's still valid C these days, but if you leave off the type of a variable or the return type of a function, the compiler would just use int. C++ doesn't do that.


Most good C practices make for fine compiling C++. A couple of extra pointer casts and renamed identifiers will make for legal C++.

In style, however, C-style code is considered to be horrendous C++. The fact that you can write C-style code in C++ should be used if and only if you can't afford to write it in C++ to begin with- i.e., if it's legacy code.

Will professional programmers laugh at me if I continue to naively stick C stuff into my C++ code?

Basically, yes. C-style coding is known in C++ as "horrendously unsafe", just to begin with. That kind of code is written only by people who don't genuinely know how to use C++. By that, I don't mean doing very low-level stuff like bit twiddling or binary re-interpretation, but things like pointer casting or manual resource management, and that will get you laughed at.


This is too broad a question; you should break it up into several. There's a way to link together C and C++ object files; C++ is backward compatible with C, and you can use C++ compiler to compile C code.

But, consider this code:

int main(void)
{
    int class = 0;
    int private = 1;
    return private-class;
}

It's valid C code, and obviously won't compile on any C++ compiler if compiled as C++ code. Just an example.


Well, the obvious key difference is that C++ is object-oriented by design and C is not. That said, you shouldn't have any horrific show-stopping issues compiling C code with g++ unless you run into one of the nasty gotchas that are floating around. You can find a lot of good references for them, and I admit that my answer is far from exhaustive.

It's true that you cannot implicitly cast from void* in C++; it won't compile, whereas you'll see it fairly often in C.

You also have to explicitly declare functions in C++ before you use them, where you don't necessarily have to in C. (It's good form to do so, but not all C programmers do.)

http://www.cprogramming.com/tutorial/c-vs-c++.html Now that I'm out of things off the top of my head, this is a good little reference; I use it frequently.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜