函数名称需保证唯一性,否则无法正确链接,编译时进行函数名修饰,产生唯一的函数名称,适用于C++中的所有函数,包括非重载函数。
由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。
为了能够在C++代码中调用C语言代码,就要用到extern "C"
来指示编译器这部分代码按C语言的进行编译,而不是C++的。
使用举例:vs √, vscode ×
test.c
#include <stdio.h>
void func_in_C() {
printf("this is func_in_C running\n");
}
test.h
#ifdef __cplusplus
extern "C" {
#endif
void func_in_C();
#ifdef __cplusplus
}
#endif
main.cpp
#include "test.h"
void main() {
func_in_C();
}