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

som*_*unt 6 c

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.  */
};
Run Code Online (Sandbox Code Playgroud)

__flexarr在代码中找不到任何定义.我在哪里搜索它?

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

我唯一知道的是你可以在其中存储不同长度的字符串,但我完全不了解它是如何/为何起作用的.

有人在乎解释吗?谢谢.

cni*_*tar 9

这是结构黑客.C99正式以"灵活阵列成员"的形式添加它.

作为一种特殊情况,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型; 这被称为灵活的阵列成员.在大多数情况下,将忽略灵活数组成员.特别地,结构的尺寸好像省略了柔性阵列构件,除了它可以具有比省略意味着更多的拖尾填充.

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
....
Run Code Online (Sandbox Code Playgroud)

如果您正在编写新代码,那么使用它的标准强制方法就是使用它[].