我可以用编程语言混合c和c ++头文件来编写代码吗? 假设
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
cout <<"Hello world"; << endl;
printf("",);
}
答案 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 ;)
疯狂模式[关]