C++由于支持函数函数重载,因此函数被编译后与C语言的函数被编译后的命名规则不一样,直接调用,链接时无法找到C语言函数:
//f.c
#include <stdio.h>
void doF()
{
printf("this is doF\n");
}
//f.h
void doF();
//m.cpp
#include "f.h"
int main()
{
doF();
return 0;
}
直接编译会报错:
m.cpp:5: undefined reference to `doF()'
解决此问题,只需通过extern “C”来声明C语言的函数,以此告之C++程序采用C语言的编译规则来链接函数。
有两种方法:
1.修改f.h头文件,加入extern “C”声明:
extern "C"{
void doF();
}
2.#include头文件时通过extern “C”来声明:
extern "C"{
#include "f.h"
}
int main()
{
doF();
return 0;
}
注:C调用C++语言函数参照: