C 如何使用#define指令定义复杂类型?

C 如何使用#define指令定义复杂类型?,c,typedef,preprocessor-directive,C,Typedef,Preprocessor Directive,我正在学习构建复杂类型。在这里,我使用typedef定义了指向shorst数组5的指针: typedef short (*mytype)[5]; 我试图找出如何使用#define指令实现同样的功能,以及它是否可行。我试过这个,但不起作用: #define MYTYPE (short*)[5] 似乎这个指令不能用于定义比指针或结构更复杂的东西。那么,这里的重点是什么 如何使用#define指令定义[指向数组类型指针的变量] 您可以只使用函数宏 #define MYTYPE(name) sho

我正在学习构建复杂类型。在这里,我使用
typedef
定义了指向shorst数组5的指针:

typedef short (*mytype)[5];
我试图找出如何使用
#define
指令实现同样的功能,以及它是否可行。我试过这个,但不起作用:

#define MYTYPE (short*)[5]
似乎这个指令不能用于定义比指针或结构更复杂的东西。那么,这里的重点是什么

如何使用#define指令定义[指向数组类型指针的变量]

您可以只使用函数宏

#define MYTYPE(name)  short (*name)[5]
int main() {
    short arr[5];
    MYTYPE(a) = &arr;
    typedef MYTYPE(mytype);
}
这里的重点是什么


没有点-预处理器是一个字符串替换工具,通常不知道C语法。使用
typedef
定义类型的别名。

建议:不要在typedef后面隐藏
*
。源代码中的
*
是一个很好的关于指针的视觉注释;同样地,缺少
*
也是一个很好的指示器—有些东西不是指针。将
*
隐藏在typedef中会破坏这种视觉指示。@pmg我只寻求教育目的,这没有任何实际用途。仍然感谢您的建议,我会记住类型应该是
short(*)[5]
,但这只适用于某些上下文,例如
casts
sizeof
操作数,而不适用于声明
#define
指令并不专门用于为类型创建别名。适当的使用包括非常短的“函数”,提供一些替换,这些替换对于将软件定制到各种环境非常有用,或者在指定
MYTYPE var时,发出打开/关闭的信号。@EricPostpischil不起作用它要求一个标识符或
@Kaiyaha:正如我的评论所说,它不适合声明。正如我的评论所说,
#define
指令不用于为类型创建别名。这是最明显的解决方案,但我只想让
MYTYPE
看起来与常规类型完全一样。这可能吗?plak plak:(