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:(