Это создает массив из двух iovec
структур в стеке и инициализирует все члены обоих элементов массива нулем.
Инициализатор {{ 0 }}
дает только явное значение дляпервый член первого элемента массива: iovec[0].iov_base
.Предоставленное значение 0 неявно преобразуется в нулевой указатель.
Другие члены первого элемента массива и другие элементы массива также неявно инициализируются: указатели на нулевой, а арифметические типы - на 0.
Строка может быть записана эквивалентно как
msg_iovec_t iovec[2] = { 0 };
Это самый короткий стандартный способ инициализации нуля всего объекта, поэтому он идиоматичен.Некоторые компиляторы могут принимать пустой список инициализатора {}
в качестве расширения.Некоторые компиляторы могут выдавать предупреждение для этой формы и требовать достаточного количества скобок для обозначения первого неагрегированного элемента (две пары, как в исходной строке).
Эффект аналогичен
msg_iovec_t iovec[2];
bzero(iovec, sizeof iovec);
* 1020.* за исключением чистого и переносимого, поскольку указатель, заполненный нулевыми байтами, не обязательно является нулевым указателем.