首页 > 其他分享 >typdefine和define的区别

typdefine和define的区别

时间:2022-11-10 17:46:04浏览次数:31  
标签:typedef const 区别 int typdefine pint ptr define

1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 会替换为3.1415926*r*r
如果你把#define语句中的数字9 写成字母g 预处理也照样带入。

2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr;

#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说;

#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换

typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符

这也说明了为什么下面观点成立
//QunKangLi(维护成本与程序员的创造力的平方成正比)
typedef int * pint ;
#define PINT int *

那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。

pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象。

3)也许您已经注意到#define 不是语句 不要在行末加分号,否则 会连分号一块置换。

标签:typedef,const,区别,int,typdefine,pint,ptr,define
From: https://www.cnblogs.com/amxiang/p/16877851.html

相关文章

  • slf4j,logback,log4j区别
    slf4j是提供日志输出api的,需要依赖logback或log4j才能输出日志。推荐使用slf4j+logback的组合,slf4j+log4j还需要适配器。slf4j+logback使用:1添加依赖<dependency><......
  • C#中++i与i++的区别
    ++i即前递增,顾名思义也就是先自增后传值;举个栗子intj=++i;此时i的值为6,j的值也为6。i++即后递增,顾名思义也就是先传值后自增举个栗子inti=5;intj=i++;此时i的......
  • TIME_WAIT和CLOSE_WAIT的区别
    系统上线之后,通过如下语句查看服务器时,发现有不少TIME_WAIT和CLOSE_WAIT。netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'TIME_WA......
  • Java中的对象使用、局部变量与成员变量的区别
    对象的使用对象的使用格式创建对象:类名对象名=new类名();使用对象访问类中的成员:对象名.成员变量;对象名.成员方法();对象的使用格式举例:publicstatic......
  • ant design vue table报错h is not defined
    报错原因使用table时由于columns数据太多,所以将columns中的数据拆分到一个单独的常量js文件中,又因为需要使用customRender,里面有<a-tag>之类的标签,需要使用jsx进行渲染,因......
  • Failed to mount component: template or render function not defined 使用 require
    为什么有的时候使用require引入组件不会报错,有的时候就会报错,需要加上default就不会报错 ?webpack支持CommonJS和ES6模块打包,当我们引用组件的时候,在script标签内使......
  • python中f.read()与f.readline区别
    众所周知在python中读取文件常用的三种方法:read(),readline(),readlines(),今天看项目是又忘记他们的区别了。以前看书的时候觉得这东西很简单,一眼扫过,待到用时却也只知道有......
  • pytorch TensorDataset和DataLoader区别
    TensorDatasetTensorDataset可以用来对tensor进行打包,就好像python中的zip功能。该类通过每一个tensor的第一个维度进行索引。因此,该类中的tensor第一维度必须......
  • 总结ref和out的区别
    之前每次遇到ref和out时,老是忘记他们的使用方法和区别。每次都要网上搜一下别人写的博客来回忆。这次干脆自己整合一下别人博客的内容,方便下次忘记时查询。用途: 在C#中......
  • 简记:/boot/grub/grub.cfg同/boot/efi/EFI/ubuntu/grub.cfg的区别
    很简单:/boot/grub/grub.cfg是给传统Legacy引导的GRUB用的配置文件。/efi/ubuntu/grub.cfg是给现代UEFI引导的GRUB用的配置文件。不同的GRUB会去找对应的grub.cfg看配置......