18

I have a a Win32 DLL project in VS2008, it is written in a handful of C modules.
Because I also want to be able to build outside VS2008, with no dependency on VS2008, I have produced a custom makefile, that does all the build and link steps. All this is set up just fine.

Now I'd like to add a couple C++ modules to this DLL. I have modified the custom makefile to compile the .cpp modules as C++, and the .c modules as regular C (/Tc) . This all works. It links everything together, no problem .

Can I configure the VS2008 project to do the same?

Can I mix C++ and C in the same VS2008 project?

Or do I need a custom build step for this?

Thanks.


ANSWER

I had the VS2008 project set to compile as C. I needed to change it to Compile As "Default". Right click the project, select Properties, and then... :

alt text

Thanks, Pavel.

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
Cheeso
  • 189,189
  • 101
  • 473
  • 713

3 Answers3

11

First of all, you shouldn't even need /Tc if you're building it yourself - cl.exe uses file extension to determine the type, so .c files will be compiled as C by default, and .cpp and .cxx files as C++.

For VS projects, it works in exact same way, except that you can't override this behavior (or at least I do not know how).

101
  • 8,514
  • 6
  • 43
  • 69
Pavel Minaev
  • 99,783
  • 25
  • 219
  • 289
  • 2
    Very helpful. Turns out there is an option in VS to set the "Compile As" option, one of /Tc , /Tp , or "default". I had it set to /Tc . I needed to reset it to "default". A-OK. – Cheeso Oct 25 '09 at 01:45
7

There's absolutely no problems mixing C and C++ in the same project. All you'll need to do it to design your interface between C and C++ modules in tems of C functions and C data structures, an then make sure that those interface functions are declared on C++ side with C-linkage specifier extern "C".

AnT stands with Russia
  • 312,472
  • 42
  • 525
  • 765
1

They should add fine, considering the Microsoft C compiler will compile both. If you add them to the project, they'll get passed to cl -- and I believe cl makes a choice what mode to use based on the extension of the file. You're using .cpp, which is good.

In short: Yes.

GCC will do this too, so your makefile should be reasonably portable.

Jed Smith
  • 15,584
  • 8
  • 52
  • 59
  • 1
    Note that if you're compiling C++ with `gcc`, `gcc` may not add necessary libraries at the link phase. The link step for a C++ program must always use `g++`, not `gcc` – bdonlan Oct 25 '09 at 01:17