千家信息网

处理C++时的注意事宜有哪些

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这期内容当中小编将会给大家带来有关处理C++时的注意事宜有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。这样的代码到底是什么意思呢?首先,__cplusplus
千家信息网最后更新 2024年11月24日处理C++时的注意事宜有哪些

这期内容当中小编将会给大家带来有关处理C++时的注意事宜有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。

#ifdef __cplusplus   extern "C" {   #endif   //一段代码   #ifdef __cplusplus   }   #endif

要明白为何使用extern "C++",还得从cpp中对函数的重载处理开始说起。在C++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等.而在C++中,只是简单的函数名字而已,不会加入其他的信息.也就是说:C++和C对产生的函数名字的处理是不一样的.

比如下面的一段简单的函数,我们看看加入和不加入extern "C++"产生的汇编代码都有哪些变化:

int f(void)   {   return 1;   }

在加入extern "C"的时候产生的汇编代码是:

 .file "test.cxx"   .text   .align 2   .globl _f   .def _f; .scl 2; .type 32; .endef   _f:   pushl %ebp   movl %esp, %ebp   movl $1, %eax   popl %ebp   ret

两段汇编代码同样都是使用gcc -S命令产生的,所有的地方都是一样的,唯独是产生的函数名,一个是_f,一个是__Z1fv。明白了加入与不加入extern "C"之后对函数名称产生的影响,我们继续我们的讨论:为什么需要使用extern "C"呢?

C++之父在设计C++之时,考虑到当时已经存在了大量的C++代码,为了支持原来的C++代码和已经写好C++库,需要在C++中尽可能的支持C++,而extern "C++"就是其中的一个策略。试想这样的情况:一个库文件已经用C++写好了而且运行得很良好。

这个时候我们需要使用这个库文件,但是我们需要使用C++来写这个新的代码。如果这个代码使用的是C++的方式链接这个C库文件的话,那么就会出现链接错误.我们来看一段代码。

明白了加入与不加入extern "C++"之后对函数名称产生的影响,我们继续我们的讨论:为什么需要使用extern "C++"呢?C++之父在设计C++之时,考虑到当时已经存在了大量的C代码,为了支持原来的C++代码和已经写好C++库,需要在C++中尽可能的支持C++,而extern "C++"就是其中的一个策略。

试想这样的情况:一个库文件已经用C++写好了而且运行得很良好,这个时候我们需要使用这个库文件,但是我们需要使用C++来写这个新的代码。如果这个代码使用的是C++的方式链接这个C++库文件的话,那么就会出现链接错误.我们来看一段代码:首先,我们使用C的处理方式来写一个函数。

上述就是小编为大家分享的处理C++时的注意事宜有哪些了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

C++ 代码 函数 处理 库文件 支持 链接 名字 就是 方式 时候 事宜 良好 也就是 也就是说 内容 名称 尽可能 情况 策略 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市哼哈网络技术有限公司 淘宝软件开发服务 美军飞行员数据库 长春盘古网络技术公司招聘 菏泽智慧城管软件开发系统 欧姆龙中国软件开发中心 ncbi官网数据库 有关校园网络安全的文章 节约的数据库管理系统 导出数据库空表未导出 富士康软件开发工程师业务 电气工程师网络技术支撑 春节社区网络安全宣传活动 计算机三级网络技术上机吗 诺顿网络安全特警破解版 药品标准物质查询数据库 应该具备哪些网络安全素养 计算机网络安全思科 计算机网络技术转人工智能 湖北服务器机柜厂家 世界第一网络安全公司 研发数据库的程序员工资高吗 上海今维互联网科技有限公司 软件开发组织业务关系图 浪潮云服务器端口号 我的世界服务器后门插件下载 电脑服务器管理器里的仪表板 江寒软件开发工作室 数据库原理要学编程吗 天津通讯软件开发创意
0