#define宏常量和const常量的区别】的更多相关文章

1.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换.因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存.const定义的常量,在程序运行时在常量表中,系统为它分配内存.2.define定义的常量,预处理时只是直接进行了替换.所以编译时不能进行数据类型检验.const定义的常量,在编译时进行严格的类型检验,可以避免出错.3.define定义表达式时要注意“边缘效应”,例如如下定义:    #define N 2+3 //我们预想的N值是5,我们这…
C++ 语言可以用const 来定义常量,也可以用#define 来定义常量.但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查.而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应).(2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试.规则5-2-1:在C++ 程序中只使用const 常量而不使用宏常量,即const 常量完全取代宏常量. 2.实现机制 宏…
最近开始准备一边做实验室的研究,一边记录一些遇到的编程中的小知识点.今天在测试对矩阵进行SVD分解时,需要定义矩阵的行和列的大小,我习惯性的用宏定义来定义了这两个变量,在运行的时候,就开始思考宏定义和常量之间有些什么样的分别. 参考了一些别人的说法,自己在这里做一个小小的总结. 类型和安全检查不同 宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误: const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查 编译器处理不同 宏定义是一个“编译时”…
const   const 是c++中的修饰符.  c++中常用来定义常量,修饰左值. #define 宏定义语句, 在预处理阶段直接做文本替换,不做类型检查. 它们之间的最大区别: 1.  对于const 变量,系统只给了一个相应的内存地址,而#define则是给出了一个立即数.因为const变量是存放在内存的静态区域中,所以在程序运行过程中const变量只有一个拷贝,而#define 所定义的宏变量却有多个拷贝,所以宏在程序运行过程中所消耗的内存要比const变量的大得多.#define所定…
常量是在程序中不能更改的量,在C/C++中有两种方式定义常量,一种是利用define宏定义的方式,一种是C++中新提出来的const型常变量,下面主要讨论它们之间的相关问题: define定义的常量: define是预处理指令的一种,它用来定义宏,宏只是一个简单的替换,将宏变量所对应的值替换,如下面的代码: #define NUM 2 int main() { printf("%d", NUM); } 编译器在编译时处理的并不是这样的代码,编译器会首先处理预处理指令,根据预处理指令生成…
1. 一个常见的考点: char* p = "test"; 那么理利用指针p来改变字符串test的内容都是错误的非法的. 例如: p[0] = 's'; strcpy(p, "haoel");  这都是错误的操作. 原因就在于,char* p = "test"; 这个声明,声明了一个指针,而这个指针指向的是全局的const内存区, const内存区当然不会让你想改就改的.所以,如果你一定要写这块内存的话,那就是一个非常严重的内存错误   2. 全…
c++中的常量可以使用const定义,也可以使用#define宏定义的方式:二者区别如下: - **区别** 1. const定义的常量有自己的数据类型,编译器可以对其进行严格的类型检查:但是define定义的宏常量没有数据类型,执行时只会对其进行字符替换,不会进行类型检查:2. const定义的常量,在程序运行时存在与常量表中,系统会为其进行内存分配:但是define定义的宏常量,在预处理阶段只是会将define定义的内容进行直接替换,在程序执行的时候常量表中没有用define定义的宏常量,系…
前言 在开发中,也许我们会经常使用到宏定义,或者用const修饰一些数据类型,经常有开发者不知道怎么正确使用,导致项目中乱用宏定义与const修饰符.本篇主要介绍在开发中怎么正确使用const与define(宏定义) 当我们想定义全局共用的一些数据时,比如通知名字,动画时长等等,我们可以用宏.常量.变量: 宏: // 注意后面不需要带符号 #define ScottDidLoginSuccess @"登陆成功" 变量: // 注意后面一定要带符号 NSString *scottDidL…
define在预处理阶段进行替换,const常量在编译阶段使用 宏不做类型检查,仅仅进行替换,const常量有数据类型,会执行类型检查 define不能调试,const常量可以调试 define定义的常量在替换后运行过程中会不断地占用内存,而const定义的常量存储在数据段只有一份copy,效率更高 define可以定义一些简单的函数,const不可以…
一.#define 含义 define是宏定义,编译器不对其进行错误检查,在预编译阶段处理,没有作用域限制属于全局常量,在程序中编译器会对定义的常量名以数值进行替换,且每次替换都分配内存,此方法对于大量常量的情况下会占用较多内存从而导致程序效率. 用法 一般用于全局型常量的定义,通常较少使用,在具有较少全局型常量(程序各处都可能用到该常量)时使用. 二.enum 含义 enum是枚举常量定义,在编译阶段处理,有作用域限制.枚举类型中可以定义多个常量(往往是同一归属的常量,比如定义星期可以有7种,…