C++函数调用C函数
先来看个例子吧,建立一个新的工程,包含三个文件
c函数头文件, cExample.h
#ifndef _C_EXAMPLE_H
#define _C_EXAMPLE_H
int add(int x, int y);
#endif
c函数源文件,cExample.c
#include "cExample.h"
int add(int x, int y)
{
return x + y;
}
main.cpp文件
#include "cExample.h"
int main(int argc, char* argv[])
{
add(2, 3);
return 0;
}
编译的时候报错,
main.cpp:(.text+0x1a): undefined reference to `add(int, int)'
collect2: error: ld returned 1 exit status
这是由于,
- C++由于要支持函数重载,所以编译的时候所有的函数都会生成一个函数别名,比如说上面的例子中main.cpp里面包含的头文件中的函数add的别名就是_add_int_int;
- C则不一样,也就是说cExample.c文件编译生成目标文件的时候,函数add的别名就是_add
所以编译链接的时候就发现函数_add_int_int找不到了;
这里main.cpp应该修改成这样
extern "C" {
#include "cExample.h"
}
int main(int argc, char* argv[])
{
add(2, 3);
return 0;
}