extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。
加上extern "C"修饰后的代码,会按C语言的规范标准进行编译,而不是C++的。
由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;
而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。
一个简单的例子:
在空项目中,创建一个a.h,简单定义一个函数void function()

对应的a.c,简单实现一下void function()的功能

在main函数中调用,注意:文件的后缀.c,表示C语言编译方式;.cpp后缀则表示C++的编译方式

错误代码如下:表示未解析的外部符号

解决方法:
1、统一后缀:把main.cpp的后缀改为.c(main.c)。

或是把a.c改为a.cpp

2、当团队合作时,有的人写C,有的人写C++,拿别人的代码文件来用的时候,谁也不会慢慢一个一个地去改。简便的处理方式:extern “C“

网友评论