Я видел это в некотором коде C:
Wininfo W = { sizeof(Wininfo) };
Какого черта это означает?
Этот код инициализирует структуру
, используя синтаксис инициализатора Funky C для инициализации каждого поля в порядке декларации, см. http://www.informit.com/ Руководства / Content.aspx? g = cplusplus & seqnum = 421 . Важным побочным эффектом в случае этого примера является то, что оставшиеся поля One не указывают значения для получения инициализации в нулях.
Этот трюк является относительно распространенным в API в Win32 - API требует, чтобы размер был предварительно установлен в качестве способа указывания версии, который клиентский код скомпилирован против - во многих из этих случаев, каждый также ожидается очистить буфер, который обычно включает в себя отдельный вызов, например, MEMSET
Перед инициализацией поля размера со размером
.
См. Также Структура инициализация языка программирования C / C ++? Для связанных примеров
Это экспрессия . Выражение , которые устанавливают первое поле W
- Sizeof (WinInfo)
и другие поля до нуля Отказ
Во-первых, это не утверждение, это декларация. Декларации не являются заявлениями в C.
, во-вторых, = {/ * Что бы ни * /}
- инициализатор - он указывает начальное значение объекта. Обычно вы используете инициализаторы, заключенные в {}
для инициализации совокупных объектов: массивы или структуры. Тем не менее, немного известная особенность языка C заключается в том, что инициализаторы скалярных объектов также могут быть дополнительно прилагаются в {}
, как в
int i = { 5 };
, что именно ваша конкретная декларация зависит от того, что WinInfo
Тип есть. Если w
- совокупность, то его первый элемент инициализируется с помощью SizeOf (WinInfo)
значение, а остальное инициализируется нулями. Если w
- это скаляр, то он просто получает начальное значение SizeOf (WinInfo)
.