天天看点

《C和C++程序员面试秘笈》——1.10 标准头文件的结构

本节书摘来自异步社区出版社《c和c++程序员面试秘笈》一书中的第1章,第1.10节,作者: 董山海,更多章节内容可以访问云栖社区“异步社区”公众号查看。

c和c++程序员面试秘笈

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

考点: 标准头文件中一些通用结构的理解

出现频率:

  void foo( int x, int y );

  void foo( int x, float y );<code>`</code>

这两个函数编译生成的符号是不相同的,前者可能为_foo_int_int之类,而后者可能为_foo_int_float之类。可以发现,这样的名字包含了函数名、函数参数数量及类型信息,c++就是靠这种机制来实现函数重载的。这样,如果在c中连接c++编译的符号时,就会因找不到符号问题发生连接错误。

如果加extern "c"声明后,模块编译生成foo的目标代码时,就不会对其名字进行特殊处理,采用了c语言的方式,也就是_foo之类,不会加上后面函数参数数量及类型信息相关的那一串了。因此extern "c"是c++编译器提供的与c连接交换指定的符号,用来解决名字匹配问题。

【答案】

代码第1、2、10行的作用是防止该头文件被重复引用。

代码第3行的作用是表示当前使用的是c++编译器。

代码第4~8行中的extern "c"是c++编译器提供的与c连接交换指定的符号,用来解决名字匹配问题。

继续阅读