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\n ",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\n ",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  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值