c语言define和typedef区别和使用
define完全可以理解替换,typedef代表别名。听着差不多的意思,那2者区别在哪?
先来个简单例子查看基本使用。
//define和typedef区别
#define DB double //替换 define 被替换的内容 替换的内容
typedef double db; //别名 typedef 原来的类型名 新的别名
//typedef需要分号 ,typeof 去掉以后符合语法规则,define去掉就会报错 void main()
{
//看不出区别
DB d1 = 1.2,d2=1.8; //等价 double d1 = 1.2,d2=1.8;
db d3 = 1.9,d4=2.3; //等价 double d3 = 1.9,d4=2.3; printf("%f,%f",d1,d2);
printf("\n%f,%f",d3,d4); }
上面唯一看出的区别就是typedef需要分号。
通过指针变量来测试2者的区别
#define DP double *
typedef double * dp; void main2()
{
DP dp1,dp2; //DP是替换,等价 double *dp1,dp2; //dp1是指针占4个字节,dp2就是double类型数据8字节
dp dp3,dp4; //都是4字节的指针, 等价于 dobule *dp3,*dp4; printf("%d,%d", sizeof(dp1),sizeof(dp2)); //4,8
printf("\n%d,%d",sizeof(dp1),sizeof(dp2)); //4,4
}
通过上面例子可以看出define完全就是替换,typedef则不同。
最后简单说明下,利用利用define和typedef构建函数指针
void print(int num)
{
printf("时间%d",num);
} void main()
{
//函数指针
void(*p)(int num) = print;
p(10);
}
但是像上面第9行代码那样写多了会觉得很烦啊,可以使用define和typedef来构建
//typedef int* pint; //给int类型指针别名
typedef void(*p)(int num); //给函数指针类型别名 ,p是类型的别名
#define Pprint(X) void(*X)(int num) //带参数的宏模式 void main()
{
//函数指针 //利用typedef
p p1 = print;
p1(); //利用define
Pprint(p2) = print;
p2();
}
c语言define和typedef区别和使用的更多相关文章
- define与typedef 区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错.例如:#define PI 3. ...
- #define与typedef区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错.例如: #define PI 3.141 ...
- 【C语言笔记】#define与typedef的区别
1.#define define是预处理指令,在编译时不进行任何检查,只进行简单的替换 宏定义的一般形式为: #define 宏名 字符串 这里所说的字符串是一般意义上的字符序列,不要和C语言中的字符 ...
- #define 和typedef的区别
typedef和define的详细区别 2011-04-19 15:11 firnow firnow 字号:T | T 对于都可以用来给对象取一个别名的Typedef和define来说,是有区别的.本 ...
- C++ #define,typedef,using用法区别
一.#define #define 是宏定义命令,宏定义就是将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替,是预编译命令,因此会在预编译阶段被执行 1.无参宏定义 无参宏的宏名 ...
- define和typedef的区别
define和typedef的区别 define是单纯的字符替换,typedef是重新定义了新的类型 #include <stdio.h> #define CHAR1 char* type ...
- C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别
总结一下在非类中使用const关键字定义常量时的初始化问题,亲测VS2015.顺便记录#define宏和typedef的区别. 1 首先对const声明的常量的初始化做简单小结: , w2 = , w ...
- #define const typedef
#define用法 1. 定义简单的常数:定义常量,便于修改 #define N 1000 2. 定义简单的函数:注意多使用括号 define可以像函数那样接受一些参数,如下: #define max ...
- #define与typedef
#define(宏定义)只是简单的字符串代换(原地扩展),它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了. typedef是为了增加可读性而为标识符另起的新名称(仅仅只是个别名), ...
随机推荐
- Mac触摸板没有弹性了
关机后,同时按启动键,空格键左边的option,command键还有p和r,听到开机声音响四声后再松开.一定要同时按!然后触摸板就可以用了. (转自知乎)
- 华为交换机STP 根ID优先级设置
http://m.blog.csdn.net/flyfish5/article/details/50224537 STP(Spanning Tree Protocol)生成树协议. 冗余链路 当前的交 ...
- 渐进式 jpg 和 交错式 gif png 提高图片站体验
渐进式 jpg 和 交错式 gif png 提高图片站体验= 渐进式的JPG比原始JPG还要小!! 让图片性感的露给你看~google picasa 和 smashing magazine 都有用到搞 ...
- 在Chrome调试器中引入jQuery
在Console中输入以下代码并回车,Console显示"function (a,b){return new m.fn.init(a,b)}"说明导入成功,就可以在Console中 ...
- centos 安装tomcat 7为服务
3:安装Tomcat 下载apache-tomcat-7.0.33.tar.gz.解压缩: tar -xzvf apache-tomcat-7.0.33.tar.gz 将解压缩后的文件夹拷贝到/usr ...
- 修改numa和io调度优化mysql性能
一.NUMA设置单机单实例,建议关闭NUMA,关闭的方法有三种:1.硬件层,在BIOS中设置关闭:2.OS内核,启动时设置numa=off:3.可以用numactl命令将内存分配策略修改为interl ...
- 黄聪:WordPress 多站点建站教程(四):获取子站点相关信息(站点的注册时间,修改时间,总文章数,URL等)
1.获取子站点blogs表里面的内容信息 $blog_details = get_blog_details(1); echo 'Blog '.$blog_details->blog_id.' i ...
- lucene相关度算法
一.这篇博客已经讲的很清楚 http://blog.csdn.net/starzhou/article/details/51543209 补充:q:就是一个查询比如是hello world 则 t: ...
- TF54000: 由于服务器时钟设置可能不正确,无法更新数据解决方案(补充)
此问题出现的原因: 服务器时间比本地时间大.由于TFS源代码的Source Control会根据签入时间做判断.如果后续签入的时间小于变更集的最新版本的时间,就会报错误“TF54000”,并拒绝签入. ...
- 从后台读取项目文件在前端iframe中展示
项目中有个需求是: 对于外部提供的前端项目,包含css.js.html.图片等的项目,将这个项目存进数据库,然后iframe中展示html,然后html中引用的js.css等文件 也能从数据库中读取并 ...