Переменные автоматические переменные размера также полезны в некоторых случаях. Они были добавлены я nC99 и поддерживались в gcc в течение долгого времени.
void foo(uint32_t extraPadding) {
uint8_t commBuffer[sizeof(myProtocol_t) + extraPadding];
Вы заканчиваете с буфером на стеке с комнатой для заголовка протокола фиксированного размера плюс переменные данные размера. Можно получить тот же эффект с alloca (), но этот синтаксис более компактен.
необходимо удостовериться, что extraPadding является рыночной стоимостью прежде, чем назвать эту стандартную программу, или Вы заканчиваете тем, что унесли стек. У Вас были бы к проверке работоспособности аргументы прежде, чем назвать malloc или любой другой метод выделения памяти, таким образом, это не действительно необычно.
7Zip имеет полный SDK для нескольких языков, включая C и C ++. Сжатие очень хорошее, хотя и не очень быстрое. Код находится под лицензией LGPL.
Вы можете использовать libzip - он под лицензией типа BSD, поэтому его следует использовать в коммерческом проекте.
Чтобы сжать несколько файлов в один zip-архив, вы можете использовать Zipios ++