技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 444|回复: 2
收起左侧

typedef的底层是不是还是由宏安装的

[复制链接]

2

主题

15

帖子

62

积分

用户组: 小·技术宅

UID
7909
精华
0
威望
2 点
宅币
43 个
贡献
0 次
宅之契约
0 份
在线时间
4 小时
注册时间
2022-6-12
发表于 2022-6-13 22:40:10 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

x
既然是的那为何typedef前面不用加#,感觉它和宏的区别不大
回复

使用道具 举报

294

主题

493

帖子

6130

积分

用户组: 真·技术宅

UID
2
精华
71
威望
254 点
宅币
4561 个
贡献
213 次
宅之契约
0 份
在线时间
747 小时
注册时间
2014-1-25
发表于 2022-6-13 23:02:40 | 显示全部楼层
宏的话就是字符串替换,处理宏的时机其实是真正编译之前。而typedef这个肯定是编译过程中处理的
宏主要是用于给常量/变量一个明确的语义,或者单纯为了减少重复代码,还有条件编译,打印日志啥的,用处杂一点;宏可以写的很高级
typedef这个就纯粹为了定义类型了

7

主题

149

帖子

8359

积分

用户组: 真·技术宅

UID
4293
精华
5
威望
424 点
宅币
6508 个
贡献
829 次
宅之契约
0 份
在线时间
248 小时
注册时间
2018-9-19
发表于 2022-6-14 19:11:31 | 显示全部楼层
本帖最后由 系统消息 于 2022-7-4 23:35 编辑

裆燃不是啊,typedef和#define的区别可大了:
[C++] 纯文本查看 复制代码
#define PINT1 int *
typedef int *PINT2;

// 以下4个变量,其中 pi12 是 int 类型,其它3个均为 int * 类型。
PINT1 pi11, pi12;
PINT2 pi21, pi22;

typedef 可以实现给数组类型和函数类型取别名,而#define不行。
[C++] 纯文本查看 复制代码
typedef int ARRTYPE[233];
ARRTYPE arr; // arr 为 233 个 int 长度的数组
typedef 返回值 调用约定 函数类型别名(参数声明);
函数类型别名 函数名; // 这是声明一个函数,其原型由typedef定义。
函数类型别名 *函数指针 = &函数名; // 这是定义一个函数指针变量。
函数类型别名 &函数引用 = 函数名; // 这是函数引用。

还有 typedef 有作用域,#define 没有:
[C++] 纯文本查看 复制代码
typedef 类型 全局作用域别名;
namespace 命名空间
{
	typedef 类型 命名空间作用域别名;

	class 类名
	{
	public:
		typedef 类型 类成员作用域别名;
	private:
		typedef 类型 类私有作用域别名;
	};

	返回类型 函数名(参数列表)
	{
		typedef 类型 函数菊部作用域别名;
		if (条件)
		{
			typedef 类型 菊部子作用域别名;
		}
		return 返回值;
	}
}

typedef 还有更强大的用法(与模板结合使用):
[C++] 纯文本查看 复制代码
template <typename T, size_t S = 0>
struct XXX
{
	typedef T type[S];
	typedef T (*ptype)[S];
	typedef T (&rtype)[S];
};
template <typename T>
struct XXX<T, 0>
{
	typedef T type;
	typedef T *ptype;
	typedef T &rtype;
};
XXX<int, 666>::type xx1, xx2; // xx1 和 xx2 都是 长度为666的int数组。
XXX<int, 666>::ptype pxx1 = &xx1, pxx2 = &xx2; // pxx1 和 pxx2 都是 长度为666的int数组的指针。
XXX<int, 666>::rtype pxx1 = xx1, pxx2 = xx2; // pxx1 和 pxx2 都是 长度为666的int数组的引用。

评分

参与人数 1贡献 +20 收起 理由
0xAA55 + 20 赞!

查看全部评分

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2022-10-7 00:20 , Processed in 0.035427 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表