我可以在一个程序中混合C和C ++

时间:2017-10-12 20:09:50

标签: c++ c

我可以用编程语言混合c和c ++头文件来编写代码吗? 假设

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
   cout <<"Hello world"; << endl;
   printf("",);
}

2 个答案:

答案 0 :(得分:4)

你所拥有的不是C和C ++代码的混合体。它是C ++代码,其中一些元素使用C风格编码编写,但不是实际的C语言。

您不能在单个源文件中混合使用C和C ++。您可以在同一程序中组合C和C ++文件,但每个源文件必须使用一种语言。

可以编写头文件,使其包含的代码可以用作C和C ++代码。当包含在C语言中时,它被视为C,当包含在C ++文件中时,它被视为C ++。 C库的大多数标题今天以这种方式编写。必须在C头上针对C ++兼容性做一些(小的)额外工作。忽略C ++存在的C头可能与C ++不兼容。

答案 1 :(得分:3)

是的,你可以

/* code.cc */
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
   cout << "Hello world" << endl;
   printf("Hello world\n");
}

但是,您需要使用c ++来编译代码

c++ -o code code.cc
./code
Hello world
Hello world

如果由François描述,你需要采取稍微不同的方式

/* code_c.h */
extern "C" {
  void printMessage();
}

需要使用C

编译的代码
/* code_c.c */
#include <stdio.h>

void printMessage() {
  printf("Hello world!\n");
}

C ++代码

/* code.cc */
#include <iostream>
#include "code_c.h"
using namespace std;
int main()
{
   cout << "Hello world" << endl;
   printMessage();
}

粘合在一起

cc -c code_c.c
c++ -c code.cc
c++ -o code code.o code_c.o
./code
Hello world
Hello world!

疯狂模式[开启]

事实上,你甚至可以将“混合”C ++与“bash”;)

<强> code_c.c

echo =1/*"beat that ;)" | tail -c13
#*/;int fun(){return printf("beat that ;)\n");}

<强> code.cc

extern "C" int fun();

int main() { return fun(); }

编译和执行

> c++ -c code.cc
> cc -c code_c.c
> c++ -o code code.o code_c.o
> ./code
beat that ;)
> bash ./code_c.c
beat that ;)

疯狂模式[关]