当前位置: 首页 > news >正文

gcc 1.c和g++ 1.c编译阶段有什么区别?如何知道g++编译默认会定义_GNU_SOURCE?

gcc 1.c和g++ 1.c编译阶段有什么区别?

借用 gcc 1.c和g++ 1.c有什么区别? 的示例代码,以汇编代码为比较目标,再经过汇编,最后生成ELF文件,三个过程结果均无差异,这个阶段充分证明了c和c++是多么相似。

编译到汇编

  • gcc -S 1.c -o 1.s
  • g++ -S 1.c -o 11.s
	.file	"1.c".text.section	.rodata
.LC0:.string	"%d".text.globl	main.type	main, @function
main:
.LFB0:.cfi_startprocendbr64pushq	%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq	%rsp, %rbp.cfi_def_cfa_register 6subq	$16, %rspmovw	$100, -2(%rbp)movswl	-2(%rbp), %eaxmovl	%eax, %esileaq	.LC0(%rip), %raxmovq	%rax, %rdimovl	$0, %eaxcall	printf@PLTmovl	$1, %eaxleave.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE0:.size	main, .-main.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0".section	.note.GNU-stack,"",@progbits.section	.note.gnu.property,"a".align 8.long	1f - 0f.long	4f - 1f.long	5
0:.string	"GNU"
1:.align 8.long	0xc0000002.long	3f - 2f
2:.long	0x3
3:.align 8
4:

汇编:

  • gcc -c 1.s -o 1.o
  • g++ -c 11.s -o 11.o

链接

  • gcc 1.o -o 1
  • g++ 11.o -o 11

如何知道g++编译默认会定义_GNU_SOURCE?

可以通过g++ --verbose选项查看g++定义了哪些宏。

gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)
COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a-'
/usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE 1.c -quiet -dumpdir a- -dumpbase 1.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccVq1vV1.s


若文章对您有帮助,欢迎关注。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。


http://www.mrgr.cn/news/70310.html

相关文章:

  • 如何选择服务器
  • 银行卡OCR 识别 API 接口如何用Java如何调用
  • 数据结构第二章线性表
  • 决策回归树【原理/算例/决策回归树 VS 线性回归】
  • 常见协议及其功能
  • 傅里叶变换在深度学习中的应用
  • 2024MoonBit全球编程创新挑战赛参赛作品“飞翔的小鸟”技术开发指南
  • 模糊搜索:在不确定性中寻找精确结果
  • PEF22554HTV3.1 品牌INTEL 电信 IC 调帧器,线路接口单元(LIU) P-TQFP-144-6 在售20000PCS
  • 云时代基础设施模型:可变与不可变之析
  • APO全量日志对接logstash和fluent日志采集生态
  • 人工智能、机器学习与深度学习:层层递进的技术解读
  • FPGA学习笔记#5 Vitis HLS For循环的优化(1)
  • 健身中心健身管理系统的设计与实现(源码+数据脚本+论文+技术文档)
  • 剧本杀app开发,行业发展的新方向
  • qt ui设计案例--登录界面
  • uniapp—android原生插件开发(1环境准备)
  • PostgreSQL 计算两个时间之间的日期差
  • 因为我不停地“抄”爆款选题,终于月入5万
  • 叉车倒车防撞预警系统:保障生产效率和员工安全
  • 2-UML概念模型测试
  • Elasticsearch实战应用:从入门到精通
  • C++网络编程之IO多路复用(三)
  • 丹摩征文活动|快速上手 CogVideoX-2b:智谱清影 6 秒视频生成部署教程
  • Python和Geopandas进行地理数据可视化的实用指南
  • 如何对公司的打印进行记录?打印机打印记录的3个自查小妙招,手把手教会你!