gpt4 book ai didi

c - 什么是 __flexarr 以及 c 程序员如何/为什么使用它?

转载 作者:太空狗 更新时间:2023-10-29 17:20:36 29 4
gpt4 key购买 nike

sys/inotify.h ( inotify.h ) 中,定义了以下结构:

struct inotify_event
{
int wd; /* Watch descriptor. */
uint32_t mask; /* Watch mask. */
uint32_t cookie; /* Cookie to synchronize two events. */
uint32_t len; /* Length (including NULs) of name. */
char name __flexarr; /* Name. */
};

我在代码中找不到 __flexarr 的任何定义。我应该在哪里搜索它?

在一个不相关的项目中,我发现了 #define __flexarr [1],我认为它做了类似的事情,但这个定义对我来说意义不大(我对 C 很不熟悉)。

我唯一知道的是你可以在其中存储各种长度的字符串,但我完全不了解这是如何/为什么工作的。

有人愿意解释吗?谢谢。

最佳答案

这是struct hack . C99官方以“灵活数组成员”的形式加入。

As a special case, the last element of a structure with more than one named member may have an incomplete array type; this is called a flexible array member. In most situations, the flexible array member is ignored. In particular, the size of the structure is as if the flexible array member were omitted except that it may have more trailing padding than the omission would imply.

sys/cdefs.h 我说:

#if __GNUC_PREREQ (2,97)
/* GCC 2.97 supports C99 flexible array members. */
# define __flexarr []
#else
# ifdef __GNUC__
# define __flexarr [0]
# else
....

如果您正在编写新代码,标准规定的使用方法是使用 []

关于c - 什么是 __flexarr 以及 c 程序员如何/为什么使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21589449/

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