所以我有一个这样声明的数组(这不是我的代码,我不会修改它):
static const struct {
int gsmesc;
int latin1;
int utf8_int;
char *utf8;
...
} gsm_escapes[] = {
{ 10, 12 , 0x0C, "\x0C" },
{ 20, '^', 0x5E, "\x5E" },
...
};
请注意,结构本身是未标记的。
我想用一个指针(而不是数组下标)迭代这个数组,我能想到的最好的就是这个,它在编译时没有任何警告:
typeof(*gsm_escapes) *esc;
...
esc = gsm_escapes;
while (esc++->gsmesc != -1) {
esc = gsm_escapes;
while (esc->gsmesc != -1) {
是否有一种“正确”的方法来声明这种指针类型,因为这种方法似乎一反常态地不优雅?
这种类型的数据结构甚至叫什么?我已经在谷歌上搜索了一段时间,但还没有想出任何涵盖它的引物。
使用typeof
是唯一直接的方法,因为结构没有标签。它也是非标准的,因此并非所有编译器都支持它。
您的选择是:
使用数组表示法而不是指针表示法:
int i=0;
while (gsm_escapes[i++]->gsmesc != -1) {
i=0;
while (gsm_escapes[i]->gsmesc != -1) {
使用typedef
为结构创建一个typeof
。这样typeof
表达式只出现一次:
typedef typeof(*gsm_escapes) struct_gsm_escapes;
...
struct_gsm_escapes *esc;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句