如何使用#define 指令定义复杂类型?
Posted
技术标签:
【中文标题】如何使用#define 指令定义复杂类型?【英文标题】:How to define a complex type with the #define directive? 【发布时间】:2020-10-22 20:09:20 【问题描述】:我正在学习构建复杂类型。这里我使用typedef
定义了一个指向short数组5的指针:
typedef short (*mytype)[5];
我正在尝试找出如何与#define
指令相同,以及它是否可行。我试过这个,但它不起作用:
#define MYTYPE (short*)[5]
似乎该指令不能用于定义比指针或结构更复杂的东西。那么,这里有什么意义呢?
【问题讨论】:
建议:不要隐藏*
作为 typedef。源代码中的*
是一个很好的视觉说明,说明某事物是指针;同样,*
的缺失是一个很好的指标,它 不是 指针。在 typedef 中隐藏 *
会破坏这种视觉指示。
@pmg 我只是为了教育目的,这没有任何实际用途。仍然感谢您的建议,我会记住这一点
类型为short (*)[5]
,但这仅适用于某些上下文,例如casts
或sizeof
操作数,不适用于声明。 #define
指令并非专门用于为类型创建别名。适当的用途包括非常短的“功能”,提供一些替代品,这些替代品可用于根据各种环境定制软件,或发出信号来打开/关闭功能。
@EricPostpischil 不起作用,当指定 MYTYPE var;
时,它要求提供标识符或 (
@Kaiyaha:正如我的评论所说,这不利于声明。正如我的评论所说,#define
指令不适用于为类型创建别名。
【参考方案1】:
如何用#define 指令定义一个[指向数组类型指针的变量]?
你可以只使用一个函数宏。
#define MYTYPE(name) short (*name)[5]
int main()
short arr[5];
MYTYPE(a) = &arr;
typedef MYTYPE(mytype);
这里有什么意义?
没有意义 - 预处理器是一个字符串替换工具,通常不了解 C 语法。使用 typedef
为类型定义别名。
【讨论】:
嗯,这是最明显的解决方案,但我只是想让MYTYPE
看起来完全像一个常规类型。这可能吗?
plak plak plak :(以上是关于如何使用#define 指令定义复杂类型?的主要内容,如果未能解决你的问题,请参考以下文章
#define S64_MIN 在 linux 数据类型中是如何定义的?