typedef与#define
来源:互联网 发布:linux ddos 攻击工具 编辑:程序博客网 时间:2024/06/07 23:39
typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间
#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题.
区别的话,
#是宏,处理的时候位于编译前阶段,宏处理器基本上对你的C/C++程序不会有任何的感知。它只处理宏的语法。而编译阶段的“程序”得到的是宏处理完的结果。typedef是编译阶段的一部分。它的意义是单一的。你用宏来定义类型,只是它恰好替换完字符串,可以达到那样的效果。但没有任何措施能够阻止你用它干别的事情。比如,咱们来个坑爹的:#define PINT (int*)
void function_name PINT;
我进行了一个函数定义,它的参数是int*。因为宏替换的结果是这样:void function_name (int*);
从这个例子里,你应当能看出来宏的无脑替换的本质。它和C编译阶段的语法完全是脱节的,所以可以蹂躏出各种花样。typedef可以做非常不同的事情。比如,类型可以作为类/名字空间的一个成员。比如:template <int opengl_type_enum>
struct TypeHelper
{
};
template<>
struct TypeHelper<GL_UNSIGNED_INT>
{
typedef GLuint Type;
}
template<>
struct TypeHelper<GL_FLOAT>
{
typedef float Type;
}
//在使用的时候
TypeHelper<GL_FLOAT>::Type my_variable = 1.234;
实际上,在标准库里,你经常能看到:template <typename T>
class ContainerType
{
public:
typedef T value_type;
}
在用的时候,可以直接引用这个value_type,它会随着你的模板参数而改变。
作用域上,#define没有作用域限制,定义过的宏在之后的程序都可用;
typedef有自己的作用域(在定义函数内)
另外,对指针操作上做个补充
typedef int * pint;
#define PINT int *;
Int i1=1,i2=2;
const pint p1=&i1;//P不可改,P指向内容可改
const PINT p2=&i2;//P可改,P指向内容不可改
举一些额外的例子:
typedef int* int_p1;
int_p1 a, b, c; // a, b, and c are all int pointers.
#define int_p2 int*
int_p2 a, b, c; // only the first is a pointer!
typedef int a10[10];
a10 a, b, c; // create three 10-int arrays
typedef int (*func_p) (int);
func_p fp // func_p is a pointer to a function that
// takes an int and returns an int
#define 直接替换下,就发现了
- typedef与#define区别
- typedef 与define
- #define与typedef用法
- typedef与#define区别
- typedef与#define
- typedef用法 与#define
- #define与typedef用法
- #define与typedef用法
- 【转】#define 与 typedef
- #define与typedef
- #define与typedef区别
- typedef用法 与#define
- #define与typedef用法
- #define与typedef
- typedef用法 与#define
- typedef 与 define 区别
- #define与typedef用法
- typedef与define
- 1102. Invert a Binary Tree (25)
- 解决vc6.0在win10下无法正常启动
- 欧拉工程第26题 找出小于1000的数字中令1/d拥有最长循环圈的数字d
- c++的一些基础
- 民生银行的笔试面试题目
- typedef与#define
- 硬盘的读写原理
- bzoj 2705 [SDOI2012]Longge的问题
- 几行代码帮你搞定屏幕适配
- 【noip2015】【Day2】【跳石头】【字串】
- BZOJ 3809 Gty的二逼妹子序列
- c++关于文件的读写操作
- 【转贴】常识普及:广府人是越佬族
- HDU 5528