Я створюю якийсь інтерфейс для програми. Для запуску програми я використовую виклик CreateProcess()
, який серед іншого отримує вказівник на STARTUPINFO
структуру. Щоб ініціалізувати структуру, яку я раніше робив:
STARTUPINFO startupInfo = {0}; // Or even '\0'.
startupInfo.cb = sizeof(startupInfo);
При компіляції програми з GCC, що включає ці набори попереджень, -Wall -Wextra
я отримую попередження, що відсутність ініціалізатора вказує на перший рядок.
warning: missing initializer
warning: (near initialization for 'startupInfo.lpReserved')
Тож я закінчив робити:
STARTUPINFO startupInfo;
memset(&startupInfo, 0, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
І таким чином компілятор не дає жодного попередження. Питання в тому, в чому різниця між цими способами ініціалізації структури? За допомогою першого методу структура не ініціалізована? Який би ви порадили?
struct struct_with_four_fields x = {1, 2, 3};
коли ініціалізується лише 3 з 4 членів.