C вовлечение кода {}

Я видел это в некотором коде C:

Wininfo W = { sizeof(Wininfo) };

Какого черта это означает?

8
задан Hogan 11 January 2010 в 15:18
поделиться

3 ответа

Этот код инициализирует структуру , используя синтаксис инициализатора Funky C для инициализации каждого поля в порядке декларации, см. http://www.informit.com/ Руководства / Content.aspx? g = cplusplus & seqnum = 421 . Важным побочным эффектом в случае этого примера является то, что оставшиеся поля One не указывают значения для получения инициализации в нулях.

Этот трюк является относительно распространенным в API в Win32 - API требует, чтобы размер был предварительно установлен в качестве способа указывания версии, который клиентский код скомпилирован против - во многих из этих случаев, каждый также ожидается очистить буфер, который обычно включает в себя отдельный вызов, например, MEMSET Перед инициализацией поля размера со размером .

См. Также Структура инициализация языка программирования C / C ++? Для связанных примеров

15
ответ дан 5 December 2019 в 05:45
поделиться

Это экспрессия . Выражение , которые устанавливают первое поле W - Sizeof (WinInfo) и другие поля до нуля Отказ

9
ответ дан 5 December 2019 в 05:45
поделиться

Во-первых, это не утверждение, это декларация. Декларации не являются заявлениями в C.

, во-вторых, = {/ * Что бы ни * /} - инициализатор - он указывает начальное значение объекта. Обычно вы используете инициализаторы, заключенные в {} для инициализации совокупных объектов: массивы или структуры. Тем не менее, немного известная особенность языка C заключается в том, что инициализаторы скалярных объектов также могут быть дополнительно прилагаются в {} , как в

int i = { 5 };

, что именно ваша конкретная декларация зависит от того, что WinInfo Тип есть. Если w - совокупность, то его первый элемент инициализируется с помощью SizeOf (WinInfo) значение, а остальное инициализируется нулями. Если w - это скаляр, то он просто получает начальное значение SizeOf (WinInfo) .

5
ответ дан 5 December 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: