wp231957 发表于 2022-5-25 15:49:22

关于常量的问题

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

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



这里的代码虽然能通过编译,可是因为那两个数值没有被用到是不是会被编译器给优化掉呢,最终exe代码中是不会有这两个数值的是吗

wp231957 发表于 2022-5-25 15:51:52

PYTHON也可以耶
1
2
3
4
5
"aa"
"bbb"
print("ok")

jackz007 发表于 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
      这是对应的汇编代码,你自己能从中找到这两个常量吗?

wp231957 发表于 2022-5-25 16:06:58

jackz007 发表于 2022-5-25 16:04
这是对应的汇编代码,你自己能从中找到这两个常量吗?

你这一堆反汇编代码是咋抓下来的

jackz007 发表于 2022-5-25 16:30:15

wp231957 发表于 2022-5-25 16:06
你这一堆反汇编代码是咋抓下来的

      使用 GNU 的 C ++ 编译器,用下面的这条命令得到汇编代码
gcc -S x.c
页: [1]
查看完整版本: 关于常量的问题