extern"C"到底做了什么,起流什么作用
来源:互联网 发布:qq三国白菜数据 编辑:程序博客网 时间:2024/04/30 08:44
//m.cpp文件int get();int main(void){get();}
测试环境为ubuntu,测试工具为gcc,编译生成的汇编文件为.s文件
.file"m.cpp".text.globlmain.typemain, @functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6call_Z3getv//get方法经过c++编译规则生成的函数名movl$0, %eaxpopq%rbp.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.sizemain, .-main.ident"GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609".section.note.GNU-stack,"",@progbits编译生成的目标文件.o
0000000000000000 T main U _Z3getv
对get方法加上extern “C”修饰
extern "C"{int get();}int main(void){get();}
生成的.s文件
.file"m.cpp".text.globlmain.typemain, @functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6callget//按照c语言规则的函数名movl$0, %eaxpopq%rbp.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.sizemain, .-main.ident"GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609".section.note.GNU-stack,"",@progbits
生成的目标代码.o文件
U get0000000000000000 T main
源文件
int get();int get(){int ddd=0;return ddd;}int main(void){get();}生成的.s文件
.file"m.cpp".text.globl_Z3getv.type_Z3getv, @function Z3getv://get函数的实现.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6movl$0, -4(%rbp)movl-4(%rbp), %eaxpopq%rbp.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.size_Z3getv, .-_Z3getv.globlmain.typemain, @functionmain:.LFB1:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6call_Z3getvmovl$0, %eaxpopq%rbp.cfi_def_cfa 7, 8ret.cfi_endproc.LFE1:.sizemain, .-main.ident"GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609".section.note.GNU-stack,"",@progbits
总结:经过extern“C”修饰过的方法(变量同理),(调用和实现)会以c语言的编译和链接规则来生成目标文件
阅读全文
0 0
- extern"C"到底做了什么,起流什么作用
- zookeeper在dubbo到底起了什么作用
- java 的接口到底起什么作用
- java 的接口到底起什么作用
- java 的接口到底起什么作用
- java 的接口到底起什么作用
- 到底什么是hash?它起什么作用?
- java 的接口到底起什么作用
- java 的接口到底起什么作用
- java 的接口到底起什么作用
- DUPLICATE到底做了什么?
- 到底做了些什么
- 你到底做了什么
- setContentView到底做了什么
- AFNetworking到底做了什么?
- AFNetworking到底做了什么?
- AFNetworking到底做了什么
- AFNetworking到底做了什么?
- 数据库-SQL语言的功能
- SpringBoot初始教程之项目结构(一)
- java 将jsonarray 转化为对应键值的jsonobject
- SpringMVC 之 Validation介绍—— 使用Validator接口进行验证
- HDU
- extern"C"到底做了什么,起流什么作用
- linux虚拟机网络配置
- .net 开发日志
- 计算机网络基础知识——(二)
- Android手机中UID、PID作用及区别
- JAVA集合类汇总
- Android listview的item中button的点击事件 item和button 可同时点击
- linux乱码
- 普通用户权限下安装mysql