[资源分享] 为什么标准头文件都有类似以下的结构?

[复制链接]
 楼主| szt1993 发表于 2023-12-23 16:57 | 显示全部楼层 |阅读模式
  1. #ifndef __INCvxWorksh
  2. #define __INCvxWorksh
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. /*...*/
  7. #ifdef __cplusplus
  8. }
  9. #endif
  10. #endif /* __INCvxWorksh */


  11. #ifndef __INCvxWorksh
  12. #define __INCvxWorksh
  13. #endif

头文件中的编译宏的作用是防止被重复引用。

作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在symbol库中的名字与C语言的不同。例如,假设某个函数的原型为:

  1. void foo(int x, int y);

该函数被C编译器编译后在symbol库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。_foo_int_int这样的名字包含了函数名和函数参数数量及类型信息,C++就是考这种机制来实现函数重载的。

为了实现C和C++的混合编程,C++提供了C连接交换指定符号extern "C"来解决名字匹配问题,函数声明前加上extern "C"后,则编译器就会按照C语言的方式将该函数编译为_foo,这样C语言中就可以调用C++的函数了。

中国龙芯CDX 发表于 2023-12-28 09:20 | 显示全部楼层
头文件中的编译宏的作用是防止被重复引用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

344

主题

2836

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部