鱼C论坛

 找回密码
 立即注册
查看: 1457|回复: 4

[已解决]关于常量的问题

[复制链接]
发表于 2022-5-25 15:49:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
看我一个能通过编译的代码
#include <stdio.h>

int main()
{
    99;
    "Abc";
    printf("OK\n");
}

这里的代码虽然能通过编译,可是因为那两个数值没有被用到  是不是会被编译器给优化掉呢,最终exe代码中是不会有这两个数值的  是吗
最佳答案
2022-5-25 16:30:15
wp231957 发表于 2022-5-25 16:06
你这一堆反汇编代码是咋抓下来的

        使用 GNU 的 C ++ 编译器,用下面的这条命令得到汇编代码
gcc -S x.c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-25 15:51:52 | 显示全部楼层
PYTHON也可以耶
1
2
3
4
5
"aa"
"bbb"
print("ok")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 16:04:57 | 显示全部楼层
        .file        "x.c"
        .text
        .section        .text$_Z6printfPKcz,"x"
        .linkonce discard
        .globl        __Z6printfPKcz
        .def        __Z6printfPKcz;        .scl        2;        .type        32;        .endef
__Z6printfPKcz:
        pushl        %ebp
        movl        %esp, %ebp
        pushl        %ebx
        subl        $36, %esp
        leal        12(%ebp), %eax
        movl        %eax, -16(%ebp)
        movl        -16(%ebp), %ebx
        movl        $1, (%esp)
        movl        __imp____acrt_iob_func, %eax
        call        *%eax
        movl        %ebx, 8(%esp)
        movl        8(%ebp), %edx
        movl        %edx, 4(%esp)
        movl        %eax, (%esp)
        call        ___mingw_vfprintf
        movl        %eax, -12(%ebp)
        movl        -12(%ebp), %eax
        movl        -4(%ebp), %ebx
        leave
        ret
        .def        ___main;        .scl        2;        .type        32;        .endef
        .section .rdata,"dr"
LC0:
        .ascii "OK\12\0"
        .text
        .globl        _main
        .def        _main;        .scl        2;        .type        32;        .endef
_main:
        pushl        %ebp
        movl        %esp, %ebp
        andl        $-16, %esp
        subl        $16, %esp
        call        ___main
        movl        $LC0, (%esp)
        call        __Z6printfPKcz
        movl        $0, %eax
        leave
        ret
        .ident        "GCC: (GNU) 12.1.0"
        .def        ___mingw_vfprintf;        .scl        2;        .type        32;        .endef
        这是对应的汇编代码,你自己能从中找到这两个常量吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-25 16:06:58 From FishC Mobile | 显示全部楼层
jackz007 发表于 2022-5-25 16:04
这是对应的汇编代码,你自己能从中找到这两个常量吗?

你这一堆反汇编代码是咋抓下来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-25 16:30:15 | 显示全部楼层    本楼为最佳答案   
wp231957 发表于 2022-5-25 16:06
你这一堆反汇编代码是咋抓下来的

        使用 GNU 的 C ++ 编译器,用下面的这条命令得到汇编代码
gcc -S x.c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 15:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表