什么是__flexarr以及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. */ }; 

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

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

我唯一知道的是你可以存储不同长度的字符串,但我完全不了解这是如何/为什么这样。

有人在乎解释吗? 谢谢。

这是结构黑客 。 C99正式以“灵活arrays成员”的forms添加它。

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

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 .... 

如果您正在编写新代码,标准强制使用它的方法只有一个[]