#include <iostream>
#include <stdio.h>
extern "C" {
#include "testc1.h"
void c1fun(char *s);
}
int main(int argc, const char * argv[]) {
// insert code here...
printf("aaaaaaaaaa\n");
c1fun("abc");
return 0;
}
#include "testc1.h"
void c1fun(char* s)
{
printf("%s",s);
}
test1.h文件内容也为空
aaaaaaaaaa
abc
可见,其实对于C语言来说,头文件是可以没有的。在C++中引用C语言的函数时不用在extern "C"{ }中的声名中函数前再加一次extern了,直接名声要引用的C语言函数就可以了,只要在C文件中有这个函数编译器就会找到并正确引用。
接下来我们看一下
C语言调用C++函数:
#ifndef __BTCChinaTool__testcpp1__
#define __BTCChinaTool__testcpp1__
#include <stdio.h>
#include <iostream>
extern "C" {
void funcpp(char* pstr);
}
void funcpp(char* pstr);
#endif /* defined(__BTCChinaTool__testcpp1__) */
#include "testcpp1.h"
void funcpp(char* pstr)
{
printf("%s",pstr);
}
同时修改一下testc1.c文件中的方法,在其中加一句调用C++函数的语句。修改后如下:
testc1.c
#include "testc1.h"
extern void funcpp(char* pstr);
void c1fun(char* s)
{s);
printf("%s",s);
funcpp("\ncall cpp func...");
}
下边是运行结果:
aaaaaaaaaa
abc
call cpp func...
具体的程序流程是先在C++的main.cpp中调用了C语言的void c1fun(char* s)方法,在输出"abc"字符串的同时,再在这个C语言方法中调到了另一个C++函数void funcpp(char* pstr)函数以输出"\ncall cpp func...".结果输出正确。
可能有人会觉得你调的C++函数不也是和C语言的函数语法几乎一样么。没有用到对象,继承的什么的C++特性。其实并不是你想的这样,C语言的函数和这里的C++函数看起来好像一样,但实际上使用的编译器是不一样的。所以他们可以调用的系统库也是不一样的。像C++中的#include <iostream>在C语言中是没有的,如果你在C语言中引用这个C语言编译器是会报错的。