C++ 我可以使用C++;VS2008中C代码中的向量
我在vs2008中运行c代码。我很好奇,如果我可以把这个代码与C++代码< p>混合,如果你用C++编译器编译你的代码作为C++程序,那么你可以使用<代码> STD::vector < /C> 如果您使用C编译器作为C程序来编译代码,则不能 <>这是因为<代码> STD::vector 是C++标准定义的一种类型,C标准没有定义任何类型,如<代码> STD::vector < /C> >p>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++。如
简单地说,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函数的声明。例如:
void foo1()extern int T; int main() { struct T { int a; int b; }; return sizeof(T) + sizeof('T'); }
#ifdef __cplusplus
extern "C" {
#endif
void foo2 ();
#ifdef __cplusplus
}
#endif
- 资料来源1.c
#include "header1.h" #include "header2.h" void foo1 () { foo2 (); /* Call a C function that uses C++ stuff */ }
- source2.cpp
如果是C程序,则正确答案为8。在C++的情况下,答案是9。我已经在我的博客文章中详细解释了这一点#include <vector> #include "header2.h" #ifdef __cplusplus extern "C" { #endif void foo2 () { std::vector<int> data; /// ... etc. } #ifdef __cplusplus } #endif
希望能有帮助。祝你好运 挑剔:编译器是一样的;这只是一个模式转换,在C和C++之间交换。吹毛求疵很抱歉误解了这篇评论,我将删除我的评论。@amit:Nevermind,我也删除了我的评论。大团圆结局。:)我认为VisualStudio只不过有一个C++编译器;它没有C编译器。所以,如果你的代码能够编译,那么你已经很好了。@Kerrek SB:它有一个
标志。不是完美的C模式,但相当接近(IIRC它使用C和C++的公共子集)/TC