Добрый вечер! Необходимо реализовать полностью без CRT.
{
STARTUPINFO SI;
ZeroMemory(&SI, sizeof(STARTUPINFO));
}
В данном коде, необходимо заполнить SI нулями. С CRT сделать это можно с помощью memset или ZeroMemory(которому тоже нужен memset). Мне эти два варианта не подходят, как можно сделать это без поддержки CRT?
Сработает ли, если я просто объявлю SI таким способом? Спасибо.
STARTUPINFO SI[sizeof(STARTUPINFO)]{0};
Со времен классического С в языке есть идиоматический Универсальный Нулевой Инициализатор { 0 }
, который может использоваться для инициализации нулем/нулями вообще чего угодно. В вашем случае
STARTUPINFO SI = { 0 };
В языке С++, в силу ряда С++ тонкостей, вариант { 0 }
не всегда применим, а его роль выполняет инициализатор {}
STARTUPINFO SI = {};
Разумеется, в С++ все это будет работать как нулевой инициализатор только если класс не определяет своих конструкторов.
Отдельно можно заметить, что синтаксис {}
инициализирует объект-приемник логическими значениями 0
, внутреннее физическое представление которых не обязано состоять из набора нулевых битов. А memset
и ZeroMemeory
как раз таки наоборот, физически обнуляют память, забивая ее нулевыми битами. Так что в общем случае стоит подумать о том, что именно вам нужно.
Так
STARTUPINFO SI[sizeof(STARTUPINFO)]{0};
вы пытаетесь объявить целый массив STARTUPINFO
.
Объявите просто
STARTUPINFO SI{ 0 };
Только вот тот же VC++ 2015, если посмотреть ассемблерный код, все равно при таком обнулении вызывает memset
. Просто невидимо для вас.
В современных версиях C++ (тестировал на VS 2017) можно ещё проще:
STARTUPINFO SI { };
Требуемый в некоторых старых компиляторах ноль больше не нужен.
Как вариант, можно использовать placement new:
new(&SI)char[sizeof(SI)]();
Виртуальный выделенный сервер (VDS) становится отличным выбором
Учился раньше на NetBeansРешил попробовать один из самых известных компиляторов
Что нужно добавить в CMakeList чтобы подключить Ws2_32lib?
Некоторые веб-камеры выдают перевёрнутые кадры, как правило из-за кривых драйверов
Пытаюсь добиться от программы, чтобы она подсчитывала количество букв и словVisual Studio выводит ошибку, указывая на getche()