该字段位于linux-4.16.12 \ include \ linux \ kfifo.h中:

#define __STRUCT_KFIFO_COMMON(datatype, recsize, ptrtype) \
    union { \
        struct __kfifo  kfifo; \
        datatype    *type; \
        const datatype  *const_type; \
        char        (*rectype)[recsize];\
        ptrtype     *ptr; \
        ptrtype const   *ptr_const; \
    }


有关此联合的信息较少。那么Rectype和Recsize的目的是什么?

马克:有人可以提供有关该工会的参考资料吗?谢谢。

最佳答案

这是C语言中的“元编程”-抱歉,我在开玩笑。

#define __STRUCT_KFIFO_COMMON(datatype, recsize, ptrtype)是定义union的宏。

它可以用于任何类型的声明,例如

typedef __STRUCT_KFIFO_COMMON(int, 64, int*) IntFiFo;


定义union类型(别名)或

static __STRUCT_KFIFO_COMMON(int, 64, int*) intFiFo;


声明static变量。

我必须承认,我对Linux内核编程一无所知–这就是我从这段代码中所读的内容(以及它的意义)。

关于

char        (*rectype)[recsize];


rectype是指向char[recsize]的指针。

为什么加上括号(())?:它们是必需的,因为如果缺少括号,这将是另一种(非预期的)类型:

char        *rectype[recsize];


是具有char*元素的recsize数组。

因此,指向数组的指针与指向数组的指针,因此是括号。

recsize是宏参数之一。恕我直言,它必须专门使用恒定的整数值。否则,可能是一个错误。 (工会中的VLA?不,那是行不通的。)

最后一个提示,说明如何解码混乱的C类型:

如有疑问,请尝试cdecl: C gibberish ⇆ English。使用recsize无效,但用提供的数字替换recsize

char (*rectype)[10];

    declare rectype as pointer to array 10 of char




发送此答案后,出于好奇,我用Google搜索了c pointer to array site:stackoverflow.com并发现

SO: C pointer to array/array of pointers disambiguation

作为第一个热门歌曲,可能对进一步阅读很有帮助。

关于c - '__STRUCT_KFIFO_COMMON'中'rectype'的目的是什么?我应该如何看待这个宏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53550612/

10-11 23:09