C & C++ 宏与const

1、宏定义函数:

例:#define do{exp} while(0)与#define exp有什么不同,好处在哪里?

定义复杂代码,防止分号,或是括号不匹配等错误。比如:

定义:

#define switch(x,y) {int tmp; tmp="x";x=y;y=tmp;}

使用时:

if(x>y)

switch(x,y);

else       //error, parse error before else

otheraction();

在把宏引入代码中,会多出一个分号,从而会报错。

2、const与#define定义常量的区别

C++中两者都可以用,但const常量有数据类型,而宏常量没有,编译器对前者进行安全检查,而对后者没有,可能会产生错误。

3、const成员函数

在函数原型说明和函数定义中都增加const限定,一般const成员函数不能够改变数据成员的值,如果要改变某个数据成员,应为该数据成员加上mutable,如mutable int counter。

4、const指针

const int * p定义的是(const int)型的指针,指向的是int型的常量,指向的值不能改。

int * const p定义的是 const的指针,它的指向不能改。

时间: 2024-10-21 06:17:35

C & C++ 宏与const的相关文章

宏 和const

// 常用字符串,常见基本变量 定义宏 // const // 苹果一直推荐我们使用const,而不是宏 const作用:  1.修饰右边基本变量或者指针变量 int a int *p 2.被const修饰变量只读 // 修饰基本变量 //int const a = 3; // const int a = 3; int * const p;  // p:只读  *p:变量 int const * p1; // p1:变量 *p1:只读 const int * p2; // p2:变量 *p2:只

#define宏,const关键字 C++

一.#define宏定义 1.宏定义,像这样的就是宏定义:#define PI 3.14159: 2.宏定义格式:#define 宏名称 宏值:宏名称就是要定义的宏,通常用一个大写的有意义的名称来表示:宏值就是这个宏所代表的常量.: 3.#define是预编译指令: 4.宏的本质是一种替代. 5.当预编译程序在处理源代码时,如果发现代码中使用了宏,就会用宏的值来代替宏. 6.使用宏的好处:使用宏给常量一个名分,除了可以避免多次输入重复使用的: 7.例子: 宏让代码更简洁明了 #define MI

iOS 宏(define)与常量(const)的正确使用

在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰你能区分下面的吗?知道什么时候用吗?#define HSCoder @"汉斯哈哈哈"NSString *HSCoder = @"汉斯哈哈哈";extern NSString *HSCoder;extern const NSString *HSCoder;static const NSString *HSCoder = @"汉斯哈哈哈

程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)

主要内容:const变量初始化.数组大小用const变量细节.const变量与#define宏.volatile修饰 一.const变量初始化时必须赋值 二.const变量在C++中可以做数组大小元素.在C中不行,因为它是变量 三.const和#define区别:内存分配 四.volatile修饰一些变量:易被操纵系统.硬件.多线程修改的变量 #include <stdio.h> int main() { /* 测试1 */ const int b; // 不初始化会报错 // b = 2;

C/C++中const关键字的用法及其与宏定义的比较

1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 1 const int a = 10; 2 int const b = 20; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了,而且编译器也不允许不赋初值的写法: 在C++中不赋初值的表达一写出来,编译器即报错,且编译不通过. 在C中不赋初值的表达写出来时不报错,编译时只有警告,编译可以

【转】iOS 宏(define)与常量(const)的正确使用-- 不错

原文网址:http://www.jianshu.com/p/f83335e036b5 在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰 你能区分下面的吗?知道什么时候用吗? #define HSCoder @"汉斯哈哈哈" NSString *HSCoder = @"汉斯哈哈哈"; extern NSString *HSCoder; extern const NSString *HSCod

宏定义

1.获取屏幕宽度与高度 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height 根据一个网友脱离语言提醒, 如果支持横屏可以用下面的宏: #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 当前Xcode支持iOS8及以上 #define SCREEN_WIDT

第3课 进化后的 const分析

1.  C语言中的const (1)const修饰的变量是只读的,使得变量具有只读属性,但本质还是变量.所以不是真正的常量,它只是告诉编译器该变量不能出现在赋值符号的左边. (2)const修饰的局部变量在栈上分配空间,全局变量在只读存储区分配空间 (3)const只在编译期有用,在运行期无用 [编程实验]C/C++中的const #include <stdio.h> int main() { const int c = 0; //C语言中会为变量c分配内存 int* p = (int*)&a

条款2:尽量以const enum inline 来替换 #define

这里说的意思其实相当于,宁可以用编译器来替换预处理器 因为使用预处理器可能使得被处理过的东西无法进入符号表,例如 #define MAXLEN 16 这里的MAXLEN并没有进入符号表,这样有编译错误出现的时候,提示的都是16而并不是MAXLEN,这样就会带来很多的错误. 对于上面的那个式子,可以尝试的使用用一个常量去替换上面的宏:const int MAXLEN = 16 注意,常量的定义式往往被放在头文件中 应该要注意到的一点:class专属常量,为了将作用域限制在一个class内,应该让他