该字段位于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/