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_startproc
    endbr64
    pushq %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq %rsp, %rbp
    .cfi_def_cfa_register 6
    subq 16, %rsp movw 100, -2(%rbp)
    movswl -2(%rbp), %eax
    movl %eax, %esi
    leaq .LC0(%rip), %rax
    movq %rax, %rdi
    movl 0, %eax call printf@PLT movl 1, %eax
    leave
    .cfi_def_cfa 7, 8
    ret
    .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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

相关推荐
神仙别闹5 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
会周易的程序员5 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
伞伞悦读5 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
free-elcmacom8 小时前
C语言字符指针与字符串字面量——从一道“剑指 Offer”笔试题说起
c语言·visual studio
qq_199886878 小时前
第6板块·第4节:构建系统与多文件项目
c++·人工智能·gpu算力
2601_966949658 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_734571768 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
汉克老师10 小时前
GESP2026年9月认证C++三级( 第三部分编程题(2、分割字符串))精讲
c++·gesp·小学生·学c++编程
估值探索者10 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN114267600810 小时前
1.3第一个程序的介绍
开发语言·qt