Основы программирования в Linux
Шрифт:
Существуют средства, которые могут помочь в анализе кода, одно из самых очевидных — компилятор. Он сообщит вам о любых имеющихся в вашей программе синтаксических ошибках.
У некоторых компиляторов есть опции, формирующие предупреждения в сомнительных случаях, таких как отсутствие инициализации переменных или применение присваиваний в условиях. Например, компилятор GNU можно запускать со следующими опциями:
Они порождают много предупреждений и дополнительных проверок на соответствие стандартам языка С. Рекомендуем взять за правило использование этих опций, особенно
Чуть позже мы кратко обсудим и другие средства,
Оснащение средствами контроля
Оснащение средствами контроля — это вставка в программу кода для сбора дополнительной информации о поведении программы во время ее выполнения. Очень популярна вставка вызовов функции
Здесь могут помочь два метода оснащения средствами контроля. Первый использует препроцессор языка С для выборочного включения кода средств контроля так, что вам нужно только перекомпилировать программу для вставки или удаления отладочного кода. Сделать это можно очень просто, с помощью конструкций, подобных приведенным далее:
Вы можете компилировать программу с флагом компилятора
В этом случае вы всегда должны определять макрос
Несколько макросов, определенных препроцессором С, могут предоставить отладочную информацию. Эти макросы раскрываются для предоставления сведений о текущей компиляции (табл. 10.1).
Обратите внимание на то, что приведенные символические имена начинаются и заканчиваются двумя символами подчеркивания. Это стандартное правило для символических имен препроцессора, и вы должны аккуратно выбирать идентификаторы, чтобы избежать конфликтов. Термин "текущие"
Таблица 10.1
Макрос | Описание |
---|---|
__LINE__ | Десятичная константа, предоставляющая номер текущей строки |
__FILE__ | Строка, предоставляющая имя текущего файла |
__DATE__ | Строка в форме "ммм дд гггг", текущая дата |
__TIME__ | Строка в форме "чч:мм:сс", текущее время |
Выполните упражнение 10.1.
Далее приведена программа cinfo.c, которая выводит дату и время компиляции, если включен режим отладки.
Когда вы откомпилируете эту программу с включенным режимом отладки (используя флаг
Как это работает
Препроцессор С, часть компилятора, отслеживает текущую строку и текущий файл во время компиляции. Он подставляет текущие (времени компиляции) значения этих переменных везде, где обнаруживает символические имена
Поскольку
Прежде чем двигаться дальше, стоит отметить, что существует способ применения функции
Метод заключается во вставке глобальной переменной как флага отладки, разрешении опции