gpt4 book ai didi

c - 'rectype' 中的 '__STRUCT_KFIFO_COMMON' 的用途是什么?我应该如何理解这个宏?

转载 作者:行者123 更新时间:2023-11-30 19:28:54 24 4
gpt4 key购买 nike

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

声明一个静态变量。

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

关于

char        (*rectype)[recsize];

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

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

char        *rectype[recsize];

是一个包含 recsize 元素的 char* 数组。

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

recsize 是宏参数之一。恕我直言,它必须专门与恒定的积分值一起使用。否则,这可能是一个错误。 ( union 中的 VLA?不,那不起作用。)

最后一个关于如何解码令人困惑的 C 类型的提示:

尝试cdecl: C gibberish ⇆ English如有疑问。使用 recsize 它不起作用,但将 recsize 替换为它提供的数字:

char (*rectype)[10];

declare rectype as pointer to array 10 of char
<小时/>

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

SO: C pointer to array/array of pointers disambiguation

作为第一个点击,进一步阅读可能会很有趣。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com