Programmer
Programmer

Reputation: 6753

Can i use C++ vectors in C code in VS2008

i am running c code in vs2008. I was curious if i can mix this code with c++ code

Upvotes: 4

Views: 4767

Answers (4)

user405725
user405725

Reputation:

The short answer is yes. However, there are some nuances.

C++ generally supports a large subset of C. It means that you can almost anything available in C (such as functions, libraries etc) from C++ code. From this point you have two options, an easy one and a bit harder.

Option #1 - Use C++ compiler.

Just have your code treated as C++. Simply put - use C++ compiler.

Option #2 - Mix C and C++.

You can write your C code and compile it with C++ compiler. Use C-like C++ where you need to use C++ components. For example, you may have a setup similar to the following:

  • head1.h - declarations of your C functions. For example:

    void foo1();

  • header2.h - declarations of your C functions that intend to use C++ code.

    #ifdef __cplusplus
    extern "C" {
    #endif
        void foo2 ();
    #ifdef __cplusplus
    }
    #endif
    

And two source files, one C and one C++:

  • source1.c

    #include "header1.h"
    #include "header2.h"
    
    void foo1 ()
    {
       foo2 (); /* Call a C function that uses C++ stuff */
    }
    
  • source2.cpp

    #include <vector>
    #include "header2.h"
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    void foo2 ()
    {
        std::vector<int> data;
        /// ... etc.
    }
    
    #ifdef __cplusplus
    }
    #endif
    

Of course, you will have to compile "cpp" files with C++ compiler (but you can still compile "c" files with C compiler) and link your program with standard C++ runtime.

The similar (but slightly more complicated) approach is used by Apple, for example. They mix C++ and Objective-C, calling the hybrid Objective-C++.

UPDATE:

If you opt for compiling C code as C++, I recommend you spend some time studying the differences between C and C++. There are cases when the code could be both legal C and C++, but produce different results. For example:

extern int T;

int main()
{
    struct T { int a; int b; };
    return sizeof(T) + sizeof('T');
}

If it is a C program then the correct answer is 8. In case of C++ the answer is 9. I have explained this in more details in my blog post here.

Hope it helps. Good Luck!

Upvotes: 4

vercellop
vercellop

Reputation: 563

There is a switch to compile .c files as C++ (/TP) . If you enable this, you can use the c as C++. Beware that some c code will not compile as C++ without modification (mainly to do with type casting; c++ has stricter rules for this).

Upvotes: 1

Alok Save
Alok Save

Reputation: 206606

If you are compiling your code using C++ compiler as a C++ program then you can use std::vector.
If you are compiling your code using C compiler as a C program then you cannot.

This is because std::vector is a type defined by the C++ Standard, C Standard does not define any type as std::vector.

In simple words a C compiler does not understand what std::vector is.

Upvotes: 1

Billy ONeal
Billy ONeal

Reputation: 106609

If you are interfacing with some existing C library, then you of course can use C++. If you are compiling as C though, you won't be able to use any C++ features, such as std::vector.

Upvotes: 0

Related Questions