extern"C"到底做了什么,起流什么作用
2017-07-12 17:51
316 查看
//m.cpp文件 int get(); int main(void){ get(); }
测试环境为ubuntu,测试工具为gcc,编译生成的汇编文件为.s文件
.file "m.cpp" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 call _Z3getv//get方法经过c++编译规则生成的函数名 movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-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 .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 call get//按照c语言规则的函数名 movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609" .section .note.GNU-stack,"",@progbits
生成的目标代码.o文件
U get 0000000000000000 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_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $0, -4(%rbp) movl -4(%rbp), %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size _Z3getv, .-_Z3getv .globl main .type main, @function main: .LFB1: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 call _Z3getv movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1: .size main, .-main .ident "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609" .section .note.GNU-stack,"",@progbits
总结:经过extern“C”修饰过的方法(变量同理),(调用和实现)会以c语言的编译和链接规则来生成目标文件
相关文章推荐
- 牛客 题库 extern "C"{}的作用以及能解决什么问题?
- extern "C"在DLL导出函数时有什么作用?
- C++中的extern "C"有什么作用
- Extern "C"的作用解析
- "_variant_t(ole_time)"与“(_variant_t)ole_time”到底有什么区别
- extern "c" 的作用
- extern "C"的作用
- @SuppressWarnings("serial")在Java中有什么作用?
- @SuppressWarnings("serial")在Java中有什么作用?
- 计算机中的"域"到底是什么意思?有什么用出?我们为什么要加入"域"?域"和"工作组"有什么分别呢?
- C++中"std::"是什么意思?起什么作用?namespace?iostream和iostream.h的区别
- spring在ssh框架中到底起到什么作用
- 在C语言头文件中加入extern "C" {} 是什么意思?
- CNN 中, 1X1卷积核到底有什么作用呢?
- __cplusplus,extern "C"的作用
- window.frames["detailFrm"].isSubmitting = true;//?起什么作用
- element.src.match("bulbon")什么作用?
- if (argc == 1) 到底有什么作用?
- extern "C" 的作用
- 在JAVA中线程到底起到什么作用!