extern 'C' 这个关键字在C语言中有什么特殊含义或用途?

2026-04-16 20:344阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计650个文字,预计阅读时间需要3分钟。

extern 'C' 这个关键字在C语言中有什么特殊含义或用途?

在C++中,经常在头文件中看到`extern C`修饰的函数,这是为了在C++程序中调用C语言模块中定义的函数。具体作用如下:

`extern C`用于指定接下来的函数使用C语言的链接约定,这样C++程序就能调用C语言编写的函数。这是因为C++和C的名称解析规则不同,如果不使用`extern C`,C++编译器可能会改变函数名称,导致链接时找不到对应的函数。

例如:cppextern C { void CFunction();}

这段代码声明了一个C语言风格的函数`CFunction`,C++程序可以像调用C语言函数一样调用它,而无需担心名称冲突或兼容性问题。

extern "C"

LuChenQun edited this pageMar 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"的话,会在最后一步链接的时候出错。

extern 'C' 这个关键字在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:www.cppblog.com/macaulish/archive/2008/06/17/53689.html

本文共计650个文字,预计阅读时间需要3分钟。

extern 'C' 这个关键字在C语言中有什么特殊含义或用途?

在C++中,经常在头文件中看到`extern C`修饰的函数,这是为了在C++程序中调用C语言模块中定义的函数。具体作用如下:

`extern C`用于指定接下来的函数使用C语言的链接约定,这样C++程序就能调用C语言编写的函数。这是因为C++和C的名称解析规则不同,如果不使用`extern C`,C++编译器可能会改变函数名称,导致链接时找不到对应的函数。

例如:cppextern C { void CFunction();}

这段代码声明了一个C语言风格的函数`CFunction`,C++程序可以像调用C语言函数一样调用它,而无需担心名称冲突或兼容性问题。

extern "C"

LuChenQun edited this pageMar 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"的话,会在最后一步链接的时候出错。

extern 'C' 这个关键字在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:www.cppblog.com/macaulish/archive/2008/06/17/53689.html