CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

哪位兄弟和我说说~typedef和#define的区别?

楼主ilovezqj(William yin)2005-11-03 20:53:03 在 C/C++ / 新手乐园 提问

看C++   PRIMER   3RD的时候   指向函数的指针那段,有关于用typedef简化指向函数指针表示的那段  
   
  我对那几个typedef   声明以后     指向函数的指针被改写后的形式有点不明白~~归根结底还是不明白宏和typedef的区别~~~ 问题点数:20、回复次数:10Top

1 楼skfox(sky)回复于 2005-11-03 22:07:31 得分 0

1,#define   不是语句   不要在行末加分号,而typedef要  
  2,#define在预处理   时进行简单的替换,而typedef不是简单替换   ,而是采用如同定义变量的方法那样来声明一种类型  
  Top

2 楼OpenGLfalcon(游隼)回复于 2005-11-03 22:45:54 得分 0

给你举个例子:  
  1.   typedef   int   MYINT  
  MYINT   a//其实编译器解释为int   a,就相当于自己定义了一个类型一样,注意只能是类型要么是自定义的,要么是内部的  
  2#define   PI   3.1415926//那么当编译器遇到PI的时候就会用3.1415926来替换掉,关键是你编程的时候不用去记一些容易忘记的常量值,而且一旦你在语句#define中修改了PI的值,那么以后PI的值都会随之变化,很方便,且不会遗忘,不会出错Top

3 楼Goldrush(上天有好生之德)回复于 2005-11-03 22:51:50 得分 0

#define是在预编译的时候处理的,  
  typeded是在编译时处理的,这两者是不同的,实际上它并不是简单的字符替换  
  使用typedef有利于程序的通用与移植  
  举个例子你就明白了。    
  #define   f(x)   x*x    
  main(   )    
  {    
   int   a=6,b=2,c;    
   c=f(a)   /   f(b);    
   printf("%d   \n",c);    
  }    
  它的输出结果为36而我们期盼的结果是9(6*6)/(2*2)    
  其根本原因就在于#define只是简单的字符串替换,但若这里你用typedef定义的话就不会出现这样的问题Top

4 楼K()回复于 2005-11-04 01:29:18 得分 0

代#号的都是预处理语句Top

5 楼newbiestar()回复于 2005-11-04 03:37:02 得分 0

一个是编译器处理的东西,而另外一个是预处理器处理的东西,存在的范围都不一样,没有什么可比性……Top

6 楼ilovezqj(William yin)回复于 2005-11-04 12:50:19 得分 0

将testCases   声明为一个拥有10   个元素的数组每个元素都是一个指向函数的函数指针  
  该函数没有参数返回类型为int  
  像数组testCases   这样的声明非常难读因为很难分析出函数类型与声明的哪部分相关  
  在这种情况下使用typedef   名字可以使声明更为易读例如  
  //   typedefs   使声明更易读  
  typedef   int   (*PFV)();   //   定义函数类型指针的typedef  
  PFV   testCases[10];  
  testCases   的这个声明与前面的等价  
   
  我就是不理解  
  typedef   int   (*PFV)();   //   定义函数类型指针的typedef  
  PFV   testCases[10];  
  testCases   的这个声明与前面的等价  
   
  哪位兄台和我说说~~Top

7 楼ilovezqj(William yin)回复于 2005-11-04 15:55:44 得分 0

up~~~~~~~~~~~~`Top

8 楼moonfkypm(传说)回复于 2005-11-04 16:13:17 得分 0

我就是不理解  
  typedef   int   (*PFV)();   //   定义函数类型指针的typedef  
  PFV   testCases[10];  
  testCases   的这个声明与前面的等价  
   
  你就看成一个类型不就的了!  
  何况它本来就是一个自定义的类型!  
  如下:  
      int   (*testCases[0])()  
  Top

9 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-11-04 18:20:10 得分 0

只有一楼的第二条才说出了两者的本质区别。不要被两者类似的外部形式所迷惑了(实际上,也只有在最简单的情况下两者外部形式才有点相似,其它99%的情况连相似都算不上),两者实际上是完全不同的东西,一个是替换,另一个是声明。Top

10 楼ilovezqj(William yin)回复于 2005-11-05 11:19:25 得分 0

哦~~我明白了~~仔细琢磨了二楼的话以后我明白了~~呵呵~~谢谢Top

相关问题

  • #define和typedef的区别
  • typedef和#define有什么区别?
  • typedef和define有什么区别
  • 请问define和typedef有啥区别?
  • 呵呵,请问typedef和#define的区别是什么?
  • typedef HANDLE EVENTHANDLE 和 #define EVENTHANDLE HANDLE 有何区别??
  • 问个弱问题 关于 typedef 和 #define的区别
  • typedef enum和enum的区别
  • #define 与 const 区别
  • typedef struct tagMSG和struct tagMSG的区别?

关键词

  • 函数
  • 指针
  • 编译器
  • 语句
  • typedef
  • testcases
  • 替换
  • 类型
  • typedefpfv
  • 区别

得分解答快速导航

  • 帖主:ilovezqj

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo