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 = ;
printf("hello,embeded world %d\n",i);
}
反汇编
Disassembly of section .rodata:
<ch>:
: andeq r0, r0, r1, rrx
2、define测试
define测试程序
#include <stdlib.h>
#define ch 'a'
int Main()
{
volatile int i = ;
printf("hello,embeded word %c\n",ch);
}
反汇编
: e1a0c00d mov ip, sp
: e92dd800 stmdb sp!, {fp, ip, lr, pc}
: e24cb004 sub fp, ip, # ; 0x4
c: e24dd004 sub sp, sp, # ; 0x4
: e3a03005 mov r3, # ; 0x5
: e50b3010 str r3, [fp, #-]
: e59f000c ldr r0, [pc, #] ; 2c <.text+0x2c>
1c: e3a01061 mov r1, #97 ; 0x61
: ebfffffe bl <Main+0x20>
: e1a00003 mov r0, r3
: e89da808 ldmia sp, {r3, fp, sp, pc}
2c: andeq r0, r0, r0
const变量与define定义常量的区别的更多相关文章
- 转:const“变量”、define的常量和static 变量
首先讲C编译器的内存分配: 代码区 数据区 用户区=线程栈+堆 其中的数据区存储:常量(define)+静态变量(static)+符号集(const)+全局变量 然后讲一下编译的大致顺序: 注释- ...
- const define 定义常量的区别
1.用const定义常量在编译的时候,提供了类型安全检查,而define 只是简单地进行字符串的替换 2.const定义的常量,会分配相应的内存空间.而define没有分配空间,只是在程序中与处理的时 ...
- PHP中const和define()定义常量的细节区别
转自:http://www.365mini.com/page/difference-of-define-and-const.htm 众所周知,在PHP中(php 4及以后),我们可以使用函数defin ...
- PHP中define()和const定义常量的区别
在PHP中可以通过define()和const两种方式定义常量可是在开发中我们应该什么时候用define()定义常量,什么时候用const定义常量? 这两种方式定义常量的主要区别是什么? 从5.3版本 ...
- UIKIT_EXTERN和define定义常量
看过我其他的博客的人都知道,我喜欢用define定义常量,最近看了一个开源的轮子,使用UIKIT_EXTERN这个定义的常量,了解了一下,发现使用宏定义的常量会在内存中临时开辟一份内存空间,而使用UI ...
- PHP中定义常量的区别,define() 与 const
正文 在PHP5.3中,有两种方法可以定义常量: 使用const关键字 使用define()方法 const FOO = 'BAR'; define('FOO','BAR'); 这两种方式的根本区 ...
- 在php中define和const定义常量的区别
define和const都可以用来定义常量,但是const定义常量的时候大小写敏感,而define可以通过设置第三个参数为true的时候来取消大小写敏感! 如图: 引用地址:点这里
- 关于java中接口定义常量和类定义常量的区别
/** * * @author YZJ * @Description java中定义常量的最佳方法 */ public final class Contants{ /** * @Description ...
- PHP define() 定义常量
PHP define()函数定义了运行时的常量, 具体语法如下所示: (PHP 4, PHP 5, PHP 7) define — Defines a named constant bool defi ...
随机推荐
- 大型项目 Gradle 的常用库和版本管理[转]
http://www.tuicool.com/articles/vqQZBrm 大型项目 Gradle 的常用库和版本管理 时间 2016-03-15 06:44:00 Mystra 原文 htt ...
- debug.keystore文件不存在解决办法
重装系统之后,丢失了debug.keystore,找了很久都没有找到,根据网上所讲的只要重新运行一个android项目;就会在avd中生成一个新的debug.keystroe,此法也没解决,索性直接重 ...
- C#目录文件复制、创建操作
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- Qt编写串口通信程序全程图文解说
(说明:我们的编程环境是windows xp下,在Qt Creator中进行,假设在Linux下或直接用源代码编写,程序稍有不同,请自己修改.) 在Qt中并没有特定的串口控制类,如今大部分人使用的是第 ...
- Strtus2标签之<s:url>
Strtus2标签<s:url> 在没有使用Struts2的时候可以使用el来进行url传参.而在Struts2中不推荐使用el(其实在Struts2.0.0.11之后就不再支持el)而推 ...
- Java Stax操作XML简介
使用stax操作xml 非常的简单,它的读取过程像是一个光标在移动.针对不同的节点做不同的处理. 先看一个基于光标的模型处理xml: public class StaxTest { @Test pub ...
- dubbo注册服务IP解析异常及IP解析源码分析
在使用dubbo注册服务时会遇到IP解析错误导致无法正常访问. 比如: 本机设置的IP为172.16.11.111, 但实际解析出来的是180.20.174.11 这样就导致这个Service永远也无 ...
- 我的Shell + VIM配置
1. 安装powerline-shell 下载powerline-shell # cd /opt/ # git clone https://github.com/milkbikis/powerline ...
- RMQ问题与ST算法
RMQ(Range Minimum/Maximum Query)问题是求区间最值问题. 对于长度为 n 的数组 A,进行若干次查询,对于区间 [L,R] 返回数组A中下标在 [L,R] 中的最小(大) ...
- jquery easyui动态校验,easyui动态验证
>>>>>>>>>>>>>>>>>>>>>>>>> ...