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