Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #51, ФЕВРАЛЬ 2005 г.

C в *nix – залог здоровья

Косякин Антон

Спецвыпуск: Хакер, номер #051, стр. 051-078-2


Довольно часто получается так, что исходный код программы разрастается до таких размеров, что держать его в одном файле становится нецелесообразно, и тогда его (исходник) разбивают на модули. В таком случае при компиляции такой программы понадобится ключ "-c" (# gcc -c program1.c): gcc выдаст объектный файл с расширением .o, который будет использован в дальнейшем. Скомпилировав таким образом все модули нашей программы, собрать их в один исполняемый файл можно такой вот командой: # gcc -o program program1.o program2.o ... .

Когда написание программы в принципе завершено и когда пора отправлять ее на растерзание конечным пользователям, можно использовать оптимизацию для уменьшения размера или ускорения работы программы. Параметры оптимизации задаются ключами "-O<x>". Использование "-O0" отключает оптимизацию. Используется по умолчанию. При использовании O1, компилятор выполняет набор некоторых оптимизаций, влияющих на скорость выполнения и уменьшение размера выходного файла. Однако применяются только те типы оптимизаций, которые не увеличивают время компиляции. "-O2" включает почти все типы оптимизаций, увеличивая при этом время компиляции и производительность выходного кода. Однако "раскрутка" циклов и inline'инг функций не включается. Далее следует ключ "-O3", который включает оставшиеся виды оптимизаций, такие как упомянутый выше inline'инг. Еще следует упомянуть ключ "-Os", который включает все виды оптимизаций, включающихся ключом O2, которые не увеличивают размер выходного кода. Плюс еще кое-что. За более подробной информацией обращайся к info-страницам по gcc.

Для отладки написанной программы необходимо совершить еще одно телодвижение – добавить отладочную информацию к программе. Для этого при компиляции (с использованием gcc) необходимо добавить ключ "-g". Именно он и сделает то, что нам нужно. Вообще, отладочная информация может быть представлена в нескольких форматах. Один из них - формат, "разработанный" специально для использования с gdb. Для осуществления этого есть специальный ключ - "-ggdb".

Одной интересной особенностью компилятора gcc является тот факт, что ключи g и O<x> могут быть использованы одновременно. Так можно попросить компилятор оптимизировать код, а затем добавить отладочную информацию. И в итоге получаешь результаты такой оптимизации в наглядном виде. Некоторые константы и переменные могут исчезнуть, блоки кода - изменить свое положение в программе. А некоторые - вообще не исполняться, так как их результат заранее можно просчитать и он никогда не меняется. Кстати, можно задать количество отладочной информации, помещаемой в результирующий файл. Всего существует три уровня, второй используется по умолчанию. Задается все ключом "-g<x>" или "-ggdb<x>". Уровень один - минимум, уровень три - максимум (добавляется информация о макросах в программе). Такие вот дела.

Начинаем

Итак, теперь перейдем к главному: программированию на C. По-моему, здесь все поделено на две части: использование системных вызовов ядра ОС, предоставляющих некоторые основные функции, и использование сторонних (внешних) библиотек, которые предоставляют более удобный интерфейс для некоторых возможностей ОС. Поэтому все сводится к чтению описаний системных вызовов и гайдов по использованию внешних библиотек :).

Назад на стр. 051-078-1  Содержание  Вперед на стр. 051-078-3