C++ 我可以使用C++;VS2008中C代码中的向量

C++ 我可以使用C++;VS2008中C代码中的向量,c++,c,C++,C,我在vs2008中运行c代码。我很好奇,如果我可以把这个代码与C++代码< p>混合,如果你用C++编译器编译你的代码作为C++程序,那么你可以使用 STD::vector < /C> 如果您使用C编译器作为C程序来编译代码,则不能 这是因为 STD::vector 是C++标准定义的一种类型,C标准没有定义任何类型,如 STD::vector < /C> >p> 简单地说,C编译器不理解什么是代码> STD::vector < /COD>是.如果你与现有的C库接口,那么你当然可以使用C++。如

我在vs2008中运行c代码。我很好奇,如果我可以把这个代码与C++代码

< p>混合,如果你用C++编译器编译你的代码作为C++程序,那么你可以使用<代码> STD::vector < /C> 如果您使用C编译器作为C程序来编译代码,则不能

<>这是因为<代码> STD::vector 是C++标准定义的一种类型,C标准没有定义任何类型,如<代码> STD::vector < /C> >p>
简单地说,C编译器不理解什么是代码> STD::vector < /COD>是.

如果你与现有的C库接口,那么你当然可以使用C++。如果你编译为C,则不能使用任何C++特性,例如<代码> STD::vector < /C> > .< /P> < P>有一个开关编译。C文件作为C++(/TP)。如果启用此操作,可以使用C作为C++。注意,有些C代码不会被编译为C++而不需要修改(主要是用类型转换来实现的;C++有更严格的规则)。然而,也有一些细微差别

C++一般支持C的大子集,这意味着你可以从C++代码中获得几乎所有可用的C(如函数、库等)。从这一点来说,你有两个选择,一个简单的,一个稍微难一点

< P>选项1:使用C++编译器。 <> >将代码视为C++。简单地说,使用C++编译器。 < P>选项2:混合C和C++。 可以编写C代码,并用C++编译器编译。使用C类C++,在这里你需要使用C++组件。例如,您可能具有与以下类似的设置:

  • head1.h—C函数的声明。例如:

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

  • P>2Heal.h——声明使用C++代码的C函数的声明。

    #ifdef __cplusplus
    extern "C" {
    #endif
        void foo2 ();
    #ifdef __cplusplus
    }
    #endif
    
和两个源文件,一个C和一个C++:

  • 资料来源1.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
    
    如果是C程序,则正确答案为8。在C++的情况下,答案是9。我已经在我的博客文章中详细解释了这一点


    希望能有帮助。祝你好运

    挑剔:编译器是一样的;这只是一个模式转换,在C和C++之间交换。吹毛求疵很抱歉误解了这篇评论,我将删除我的评论。@amit:Nevermind,我也删除了我的评论。大团圆结局。:)我认为VisualStudio只不过有一个C++编译器;它没有C编译器。所以,如果你的代码能够编译,那么你已经很好了。@Kerrek SB:它有一个
    /TC
    标志。不是完美的C模式,但相当接近(IIRC它使用C和C++的公共子集)