我想这里肯定有一个重复的问题,但我找不到。我最近正在从事一个C项目,并且在尝试使代码尽可能简洁的同时,我考虑了对具有某种类型的一致使用的数组进行类型定义。
作为示例,假设结构类型为entry
的数组始终具有固定长度MAX_N_ENTRIES
。我想通过重写代码来减少冗余;
struct entry ents[MAX_N_ENTRIES];
此代码;
typedef struct entry entry_arr_t[MAX_N_ENTRIES];
entry_arr_t ents;
我担心的是,由于数组类型显然应该以与C中的任何原始类型不同的方式进行处理,因此这种类型定义可能会在将来引起混乱,使其看起来像是别名。基元。
是的,可以为数组类型创建typedef -在标准C库中甚至还有一个示例,即与jmp_buf
和setjmp
一起使用的longjmp
类型。
然而,通常认为这是较差的样式,因为通常假定类型名称是指一类类型,您可以使用它来处理所有普通的一类类型的事情,尤其是:分配它们。但是,您当然不能在C中分配数组,因为它们不是一流的类型。
换句话说,给定您问题中的typedef,以后的程序员可能会合理地认为有可能编写代码
entry_arr_t ents1, ents2;
...
ents1 = ents2;
但是当然,分配会失败。