Введение
В данном руководстве подробно разбирается специфика утилиты c99-gcc, предназначенной для трансляции исходных текстов на языке C в строгом соответствии со спецификацией ISO C99 в среде Ubuntu. Весь процесс продемонстрирован на реальной практике: от развертывания сборочного инструментария и написания тестового модуля с характерными синтаксическими конструкциями C99 до тонкой настройки флагов оптимизации и анализа готовых бинарных файлов.
1. Развертывание сборочного окружения и проверка c99-gcc
Для полноценной работы с компилятором требуется базовый стек утилит разработки. Обновим индекс репозиториев и установим метапакет build-essential вместе с gcc.

Чтобы удостовериться, что исполняемый файл c99-gcc доступен в системных путях поиска $PATH, запросим его точное расположение утилитой which c99-gcc.

Утилита c99-gcc представляет собой специализированный интерфейс к GCC, активирующий поддержку стандарта ISO/IEC 9899:1999. Проверим используемую версию и параметры сборки с помощью ключа --version.
⚙️ [Ключевые аргументы командной строки]
-c : выполняет компиляцию и ассемблирование без вызова компоновщика, создавая объектные файлы (.o).-o : задает имя и путь для генерируемого выходного файла.-O : управляет уровнем оптимизации результирующего машинного кода (по скорости и размеру).-g : внедряет отладочную информацию в двоичный файл для анализа через GDB.-Wall : включает предупреждения компилятора для выявления сомнительных и потенциально опасных участков кода.-I : дополняет список каталогов для поиска подключаемых заголовочных файлов.-l : подключает указанную внешнюю библиотеку на этапе линковки.

2. Создание демонстрационной программы с синтаксисом C99
Изолируем тестовые файлы в отдельном рабочем каталоге, создав директорию ~/c99_practice вызовом mkdir -p.

Сформируем файл ~/c99_practice/c99_test.c, задействовав ключевые новшества девяносто девятого стандарта: встроенный булев тип из <stdbool.h> и объявление счетчика непосредственно внутри заголовка цикла for.

Убедимся в целостности и корректности записанного исходника, выведя его содержимое на экран утилитой cat.

3. Компиляция исходного кода и запуск полученной программы
Скомпилируем написанный модуль в исполняемый бинарный файл c99_test, передав путь к исходнику и назначив выходной файл с помощью ключа -o.

С помощью команды ls -l проконтролируем успешное появление бинарника в файловой системе, проверив атрибуты доступа и размер полученного файла.

Запустим собранное приложение напрямую из терминала и проверим корректность работы цикла и форматированного вывода строк.

4. Сборка с расширенным контролем предупреждений и оптимизацией
Для подготовки надежного промышленного кода рекомендуется задействовать строгий статический анализ и оптимизацию. Пересоберем приложение в файл c99_test_opt, включив набор информативных предупреждений -Wall и -Wextra, а также второй уровень оптимизации -O2. Процесс проходит чисто, без диагностических замечаний.

Сравним характеристики скомпилированных версий и исходного кода, запросив расширенный список файлов с человекочитаемыми размерами через ls -lh.

Выполним оптимизированный исполняемый модуль c99_test_opt, чтобы удостовериться в полной эквивалентности его поведения стандартной сборке.

Мы рассмотрели практические аспекты компиляции программ на C по стандарту C99 с помощью c99-gcc в дистрибутиве Ubuntu. Использование стандартизированного компилятора в связке с продуманными флагами позволяет создавать надежный, переносимый и высокопроизводительный софт для Linux-систем.