user-0 提问: #DEFINE与typedef

回复:
user: user-1
content: typedef是直接定义类型，而#define只是直接替换你所定义的字符串内容，没有类型可言。所以用到#define的时候一定要注意它所在位置被替换成目标字符串后，是否存在判断优先级的问题。

user: user-2
content: 引用 9 楼 sholber 的回复:typedef int * A; const A a; 初看起来，标识符a的类型const int *，因为以上第二行似乎等效于 const int * a; 事实上，这是错的。你应当这样来解读：a的类型是const A，而A是一个指针类型的别名。所以，a的类型是const指针，即 int * const a;+1

user: user-3
content: typedef int * A; const A a; 初看起来，标识符a的类型const int *，因为以上第二行似乎等效于 const int * a; 事实上，这是错的。你应当这样来解读：a的类型是const A，而A是一个指针类型的别名。所以，a的类型是const指针，即 int * const a;

user: user-4
content: VC编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-5
content: const a p;// int * const p;  const b p;// int const *p;

user: user-6
content: 引用 5 楼 ant2012 的回复:const int  （*p）;和（const int*） p;是一个意思啊 typedef 和 #define 区别在于：前者是自定义类型，后者是简单替换。 typedef int* a; #define b int*  const a p; const b p;  这两句效果是等价的  但如果是 const a p1, p2;    // 相当于 const int *p1, *p2; contst b p1, p2;   // 相当于 const int *p1, p2; 就不一样了 前者p1, p2都是指向整型常量的指针，即值不能更改 后者p1是指向整型常量的指针， p2是int整型  不对吧。兄弟。 看代码。 # include<stdio.h> typedef int* a; # define b int* int main (void) { 	 	int x = 1; 	const a p1=&x;    //         const  作用于 p1  	const b p2=&x;   //宏展开后：const int* p2=&x,const 作用于*p2  	 	(*p1)--; 	(*p2)--;    //error 	 	 	return 0; }

user: user-7
content: const int  （*p）;和（const int*） p;是一个意思啊 typedef 和 #define 区别在于：前者是自定义类型，后者是简单替换。 typedef int* a; #define b int*  const a p; const b p;  这两句效果是等价的  但如果是 const a p1, p2;    // 相当于 const int *p1, *p2; contst b p1, p2;   // 相当于 const int *p1, p2; 就不一样了 前者p1, p2都是指向整型常量的指针，即值不能更改 后者p1是指向整型常量的指针， p2是int整型

user: user-6
content: 先看一个问题: const int p=1;      它等价于:int cosnt p=1  //其实后者才是最符合逻辑的，const 修饰p而不是int，但是人们习惯前者这样写。 int a = 1; cosnt int * p =&a;  //你认为const修饰哪个呢？用下面的代码做实验： # include <stdio.h> int main (void) { 	 	int a = 1; 	const int *p=&a; 	 	(*p)--;  //测试点1，如果这句有问题，说明cosnt修饰 *p  	 	p=NULL;  //测试点2，如果这句有问退，说明cosnt修饰 p  	 	return 0; }  问题： 大家写的时候都喜欢cosnt打头，到底cosnt修饰谁？ 有一个规律已经可以看出来了：cosnt 跳过一个最简单的类型符号，修饰后面的部分。 什么意思呢？ const int p=1;      cosnt 跳过int    于是写成  : int cosnt p=1  ，结论：cosnt 修饰p const int *p=&a;  cosnt 跳过int  (int 比int*简单，所以跳过int而不是int*)  于是写成  ：int cosnt*p=&a，结论：cosnt 修饰*p 类推。 现在再引入typedef  和 # define 。 这个是老话题了。typedef 是给一个已经存在的类型取别名，而define 仅仅是代码字面上的替换（编译第一阶段预处理是进行） typedef int* a    //a就是int*型的别名,一旦形成，它是固定的，不可分拆，就是说a就是一个简单类型 再来看：  const a p     cosnt跳过类型a    写成------>a const p ,很明了 而define呢？自己先宏替换，再按那个思路，就好了。

user: user-8
content: #define的作用是直接替换，C++中有type这种用法吗？我只知道type用在模板类中

user: user-9
content: typedef int        *PTR_T; typedef const int  *PTR_CONST_T; typedef const PTR_T CONST_PTR_T;  #define PTR_D       int * #define PTR_CONST_D const int * #define CONST_PTR_D int * const  // 等价 const PTR_T p;      // <==> const int *p; const PTR_D p;      // <==> const int *p;  // 等价(同上) PTR_CONST_T p;      // <==> const int *p; PTR_CONST_D p;      // <==> const int *p;  // 等价 CONST_PTR_T p;      // <==> int *const p; CONST_PTR_D p;      // <==> int *const p;  // 不等价 const PTR_T p1, p2; // <==> const int *p1, *p2;                     //      const int *p1; <==> const int (*p1); <==> int const (*p1);                     //      const int *p2; <==> const int (*p2); <==> int const (*p2); const PTR_D p1, p2; // <==> const int *p1, p2;                     //      const int *p1; <==> const int (*p1); <==> int const (*p1);                     //      const int p2; // 不等价(同上) PTR_CONST_T p1, p2; // <==> const int *p1, *p2;                     //      const int *p1; <==> const int (*p1); <==> int const (*p1);                     //      const int *p2; <==> const int (*p2); <==> int const (*p2); PTR_CONST_D p1, p2; // <==> const int *p1, p2;                     //      const int *p1; <==> const int (*p1); <==> int const (*p1);                     //      const int p2; // 不等价 CONST_PTR_T p1, p2; // <==> int *const p1, *const p2;                     //      int *const p1; <==> int (*const p1);                     //      int *const p2; <==> int (*const p2); CONST_PTR_D p1, p2; // <==> int *const p1, p2;                     //      int *const p1; <==> int (*const p1);                     //      int p2;

user: user-0
content: 没写完，const b p;// 是否可以理解为 const int  （*p）;