#define和typedef
来源:互联网 发布:wifi监控器软件下载 编辑:程序博客网 时间:2024/05/20 03:06
在C/C++中,经常被问到#define和typedef的区别,
我想,最大的区别是:
#define为预处理指令,用它来定义常量(包括无参量与带参量),在编译的预处理阶段进行简单的替换
typedef常用来定义一个已知类型、标识符或关键字的别名,在编译时如同定义变量的方法那样来声明一种类型。
下面列举了一些具体的异同:
#include <iostream.h>//定义宏开关,也可在编译时加参数-D, g++ -D def.cpp#define DEBUG//定义常量#define PI 3.1415abc#define CONSTANT 1 //定义类型#define U8 unsigned char typedef char INT8; typedef static int staticINT;typedef int *A[5]; //数组指针typedef int *(*Func[5])(void(*)()); //函数数组指针typedef struct S_TYPEDEF //结构体{ int temp;}S;//在C语言里面,如果不用typedef struct, 在声明时必须struct S_TYPEDEF st;而C++就不存在,直接S_TYPEDEF st;//定义方法,可带参#define TEST(x) \ for(int i= 0; i<x; i++) \cout<<i<<endl;//区别://1.用#define定义的指针类型 定义多个连续变量,从第二个开始将抛弃指针#define STR_DEF char* typedef char* STR_TYP;//这里将编译出错,str_d2的类型是char,而不是char*STR_DEF str_d1 = "abc";// str_d2 = "xyz";STR_TYP str_t1 = "abc", str_t2 = "xyz";//2.typedef定义的指针类型,把const加在类型前面(加在后面正常), 看似常量指针,实际指针常量void mystr() { typedef char* PSTR; //看似是cont char*PSTR,实际上是char* const(指针常量,指针不可变,常量可变) const PSTR pstr = "abc"; //pstr = "xyz";//编译报错 *pstr = 'a'; //定义为const char *p(常量指针) const char *p = "abc"; p = "xyz"; //*p = 'a';//编译报错 #define STR char* //类型不会发生变化 const STR str = "abc"; str = "xyz"; //*str = 'a'; //编译报错 } //3.#define的没有作用域的限制,在局部定义,其它外部也可以使用//typedef有作用域的限制,局部定义,局部使用void test_define(){ #define LOCAL typedef int Array[10];}void test_define_cout(){ #ifdef LOCAL //可以输出 cout<<"hello local define"<<endl; #endif //编译报错,Array没有定义 //Array a, b ; //a[10], b[10]}int main(){ TEST(10); test_define_cout(); mystr(); return 1;}
0 0
- typedef和#define
- typedef 和 define
- #define和typedef
- #define和typedef比较
- 关于#define和typedef
- typedef和#define
- define和typedef + tips
- #define和typedef区别
- #define和typedef(转载)
- define和typedef区别
- #define和typedef区别
- define const 和 typedef
- #define和typedef
- typedef和#define
- Define 和typedef
- typedef 和 #define
- #define 和#typedef
- typedef 和#define
- 一步一步入门机器学习之五:机器学习自学指南
- Java中的回车换行符/n /r /t
- 17_exit()函数
- 垃圾回收机制
- 【UVa】10755 Garbage Heap 三维前缀和
- #define和typedef
- Maven教程初级篇03: 创建Web应用
- 18_有关循环结构的综合实例
- 19_一维数组
- 开源 nosql 数据库 —— LedisDB 简介
- 3.集合--ConcurrentHashMap之实现细节
- 20_二维数组_输出魔方阵
- 【心凉只需一瞬间!超现实的人生感悟!】
- 加快Soap客户端SUDS访问速度