С этим видом инициализации я борюсь постоянно. В C99 можно сделать:
WINDOWPLACEMENT wplcmt = {.length = sizeof(wplcmt), .showCmd = SW_SHOW};
А остальные значения инициализируются нулями.
В G ++ вы можете сделать:
WINDOWPLACEMENT wplcmt = {length: sizeof(wplcmt), showCmd: SW_SHOW};
И, наконец, в C ++ вы можете выбрать между инициализацией всех участников или надеяться, что вы получите правильный порядок элементов, например:
WINDOWPLACEMENT wplcmt = {sizeof(wplcmt)};
WINDOWPLACEMENT wplcmt = {sizeof(wplcmt), 0, SW_SHOW, {0, 0}, {0, 0}, {0, 0, 0, 0}};
На самом деле в последнем случае я даже не уверен, что все компиляторы C ++ поддерживают составную буквальную инициализацию. Кроме того, если члены изменят порядок или тип, а ваши значения по-прежнему соответствуют, вы не получите ошибку.
Лично я решу использовать C99 там, где могу, я бы объявил структуру, которую вы дали, одним ударом, со всеми известными значениями заранее, как это:
WINDOWPLACEMENT const wplcmt = {.length = sizeof(wplcmt), .showCmd = SW_SHOW};
Update0
Казалось бы, "инициализировать все", о котором я говорил, предназначено только для массивов? Моя ошибка, это делает C ++ немного более удобным для использования.