网站 英语,中国互联网大厂排名,网站和虚拟服务器,网站怎么换模板extern C LuChenQun edited this page Mar 30, 2019 3 revisions在C中常在头文件见到extern C修饰函数#xff0c;那有什么作用呢#xff1f; 是用于C链接在C语言模块中定义的函数。 C虽然兼容C#xff0c;但C文件中函数编译后生成的符号与C语言生… extern C LuChenQun edited this page Mar 30, 2019 · 3 revisions 在C中常在头文件见到extern C修饰函数那有什么作用呢 是用于C链接在C语言模块中定义的函数。 C虽然兼容C但C文件中函数编译后生成的符号与C语言生成的不同。因为C支持函数重载C函数编译后生成的符时带有函数参数类型的信息而C则没有。 例如int add(int a, int b)函数经过C编译器生成.o文件后add会变成形如add_int_int之类的, 而C的话则会是形如_add, 就是说相同的函数在C和C中编译后生成的符号不同。 这就导致一个问题如果C中使用C语言实现的函数在编译链接的时候会出错提示找不到对应的符号。此时extern C就起作用了告诉链接器去寻找_add这类的C语言符号而不是经过C修饰的符号。 C调用C函数的例子: 引用C的头文件时需要加extern C //cExample.h
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
int add(int x,int y);
#endif//cExample.c
#include cExample.h
int add( int x, int y ) {return x y;
}//cppExample.cpp
extern C {#include cExample.h
}int main(int argc, char* argv[]) {add(2,3); return 0;
}//Generate cExample.o file
gcc -c cExample.c
g -c cppExample.cpp
g cppExample.cpp cExample.o -o main 注意如果cppExample.cpp中没有extern c的话会在最后一步链接的时候出错。 C中调用C函数extern C在C中是语法错误需要放在C头文件中。 // cppExample.h
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern C { int add( int x, int y ); }
#endif// cppExample.cpp
#include cppExample.h
int add( int x, int y ) {return x y;
}// cExample.c
extern int add( int x, int y );
int main() {add( 2, 3 ); return 0;
}Reference: http://www.cppblog.com/macaulish/archive/2008/06/17/53689.html 转载于:https://www.cnblogs.com/ggzhangxiaochao/p/11419857.html