admin 管理员组

文章数量: 1087139


2024年5月25日发(作者:filter滤镜)

C++中extern “C”含义深层探索

extern “C” 是一个双向都需要用到的语法表示,就是说在cpp引用c头文件,或

者c引用cpp文件时都需要用到。但extern “C” 永远只能在cpp引用时出现,c引用

时不允许存在。当cpp引用c中的函数时,需要在cpp使用的头文件中声明extern “C”,

当c引用cpp中的函数时,需要在cpp使用的头文件中用extern “C”声明,这样编译

器在编译时会对函数名进行特殊处理,以使其能够被c引用。如果不进行声明,那么当c

引用这个头文件时,就会找不到函数,因为cpp的函数命名规则中包含变量类型,而c编

译后的函数名不包含这些。

1.引言

C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局

变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C

++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义

不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了

支持函数的重载,C++对全局函数的处理方式与C有明显的不同。

2.从标准头文件说起

某企业曾经给出如下的一道面试题:

面试题

为什么标准头文件都有类似以下的结构?

#ifndef __INCvxWorksh

#define __INCvxWorksh

#ifdef __cplusplus

extern "C" {

#endif

/*...*/

#ifdef __cplusplus

}

#endif

#endif /* __INCvxWorksh */

分析

显然,头文件中的编译宏“#ifndef __INCvxWorksh、#define __INCvxWorksh、#

endif” 的作用是防止该头文件被重复引用。

那么


本文标签: 函数 头文件 引用 语言