zoukankan      html  css  js  c++  java
  • const变量与define定义常量的区别

    一、概念性区别

        const 变量就是在普通变量前边加上一个关键字const,它赋值的唯一机会就是“定义时”,此变量不能被程序修改,存储在rodata区。

        define定义的是常量,不是变量,所以编译器就不会给define定义的宏名字分配存储单元。通常来说,编译器对常量的处理方式是嵌入到代码中,以立即数的方式出现。

    二、测试

    1、const测试 

    const测试程序

    #include <stdio.h>
    #include <stdlib.h>
    const char ch = 'a';
    int Main()
    {
        volatile int i = 5;
        printf("hello,embeded world %d ",i);

    }

    反汇编

    Disassembly of section .rodata:
    00000000 <ch>0:    00000061     andeq    r0, r0, r1, rrx 

    2、define测试 

    define测试程序 

    #include <stdio.h>
    #include <stdlib.h>
    #define ch 'a'
    int Main()
    {
        volatile int i = 5;
        printf("hello,embeded word %c ",ch);

    }

    反汇编

    00000000 <Main>:
       0:    e1a0c00d     mov    ip, sp
       4:    e92dd800     stmdb    sp!, {fp, ip, lr, pc}
       8:    e24cb004     sub    fp, ip, #4    ; 0x4
       c:    e24dd004     sub    sp, sp, #4    ; 0x4
      10:    e3a03005     mov    r3, #5    ; 0x5
      14:    e50b3010     str    r3, [fp, #-16]
      18:    e59f000c     ldr    r0, [pc, #12]    ; 2c <.text+0x2c>
      1c:    e3a01061     mov    r1, #97    ; 0x61
      20:    ebfffffe     bl    20 <Main+0x20>
      24:    e1a00003     mov    r0, r3
      28:    e89da808     ldmia    sp, {r3, fp, sp, pc}
      2c:    00000000     andeq    r0, r0, r0 
  • 相关阅读:
    剑指offer63:数据流中的中位数
    剑指offer62:二叉搜索树的第k个结点,二叉搜索树【左边的元素小于根,右边的元素大于根】
    剑指offer61:序列化二叉树
    关于手机拍摄的图片在处理过程中出现问题的解决方法
    一道逻辑思考题
    鼠标右键无反应解决方法
    六大设计原则
    开源镜像网站
    获取当前文件夹下的文件名称
    wget使用方法
  • 原文地址:https://www.cnblogs.com/amanlikethis/p/3465186.html
Copyright © 2011-2022 走看看