我在vs2008中运行c代码。我很好奇,如果我可以将此代码与c ++代码混合
答案 0 :(得分:4)
简短的回答是肯定的。但是,有一些细微差别。
C ++通常支持C的大部分子集。这意味着您几乎可以从C ++代码中获得C语言中的任何可用内容(例如函数,库等)。从这一点来看,你有两个选择,一个简单,一个更难。
选项#1 - 使用C ++编译器。
只需将您的代码视为C ++即可。简单地说 - 使用C ++编译器。
选项#2 - 混合C和C ++。
您可以编写C代码并使用C ++编译器进行编译。在需要使用C ++组件的地方使用类似C的C ++。例如,您可能具有类似于以下内容的设置:
head1.h - C函数的声明。例如:
void foo1();
header2.h - 打算使用C ++代码的C函数的声明。
#ifdef __cplusplus
extern "C" {
#endif
void foo2 ();
#ifdef __cplusplus
}
#endif
两个源文件,一个C和一个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
当然,您必须使用C ++编译器编译“cpp”文件(但您仍然可以使用C编译器编译“c”文件)并将程序与标准C ++运行时链接。
例如,Apple使用类似(但稍微复杂一些)的方法。他们混合使用C ++和Objective-C,调用混合的Objective-C ++。
<强>更新强>
如果您选择将C代码编译为C ++,我建议您花些时间研究C和C ++之间的差异。有些情况下,代码既可以是合法的C和C ++,但会产生不同的结果。例如:
extern int T;
int main()
{
struct T { int a; int b; };
return sizeof(T) + sizeof('T');
}
如果它是C程序,那么正确的答案是8.如果是C ++,答案是9.我已在我的博客文章here中详细解释了这一点。
希望它有所帮助。祝你好运!
答案 1 :(得分:1)
如果您使用C ++编译器编译代码作为C ++程序,那么您可以使用std::vector
。
如果您使用C编译器编译代码作为C程序,则不能。
这是因为std::vector
是由C ++标准定义的类型,C标准没有将任何类型定义为std::vector
。
简单来说,C编译器不了解std::vector
是什么。
答案 2 :(得分:1)
有一个开关将.c文件编译为C ++(/ TP)。如果启用此功能,则可以将c用作C ++。请注意,某些c代码不会在没有修改的情况下编译为C ++(主要与类型转换有关; c ++对此有更严格的规则)。
答案 3 :(得分:0)
如果您正在与一些现有的C库连接,那么您当然可以使用C ++。如果您正在编译为C,则无法使用任何C ++功能,例如std::vector
。