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是为了增加可读性而为标识符另起的新名称(仅仅只是个别名), ...
随机推荐
- Linux解压rar、zip、war、tar文件
在Linux上解压常见文件的命令: rar文件:rar e xxx.rar zip文件:unzip -xzvf xxx.zip war包:jar -xvf xxx.war tar包:tar -xzvf ...
- mysql配置调优-开启慢查询日志-slow_query_log
工作中,会遇到需要查看mysql的top 20 慢sql,逐个进行优化,加上必要的索引这种需求,这时就需要开启数据库的慢查询日志的功能 1.查询当前慢查询日志的状态 # 默认为关闭状态 mysql - ...
- MyBatis_Study_001(入门)
1.话不多说,直接搞起; (源码地址https://github.com/carryLess/mbtsstd-001) 2.去官网https://github.com/mybatis下载文件 下载完成 ...
- 32位C#程序连接64位ORACLE数据库
VS2008 生成32位程序,安装在64位服务器上,调用System.data.oracleclient oracleConn = new OracleConnection(); ...
- linux下tengine安装
1.什么是tengine? 说到tengine,首先还是得说下nginx了,大家对于nginx并不陌生,对于基本的需求都能满足,如果是涉及高级性能,那么就必须使用商用版nginx plus了,一谈到商 ...
- 黄聪:VPS配置Filezilla Server支持FTP的Passive被动模式(FTP连接不上怎么办?有详细教程)
Filezilla Server的配置: 1.Filezilla默认的模式是Port模式,不是Passive被动模式.为了解决防火墙后的客户端连接问题,最好是启用Passive模式.要启动被动模式,首 ...
- NPOI-Excel系列-1002.创建带有Document Summary Information和Summary Information的Excel文件
1. using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.POIFS.FileSystem; using Microsoft.VisualSt ...
- (转)C#与Outlook交互收发邮件
本文转载自:http://www.cnblogs.com/Moosdau/archive/2012/03/11/2390729.html .Net对POP3邮件系统已经集成了相应的功能,但是如果是基于 ...
- nginx.conf_2017-11-24
user webroot; worker_processes 4; worker_cpu_affinity 1000 0100 0010 0001; worker_rlimit_nofile 6550 ...
- MySQL转Oracle,MyBatis Mapper XML 文件修改项总结
1.对于批量插入 需要更改成 <insert id="saveAll"> insert into(a,b,c) <foreach collection=" ...