LINT(1)
LINT(1)
НАЗВАНИЕ
lint - верификатор C-программ
СИНТАКСИС
lint [-a] [-b] [-h] [-u] [-v] [-x] [-l библ] [-n] [-p] [-c] [-o библ] файл ...
ОПИСАНИЕ
Команда lint пытается обнаружить в заданных файлах, содержащих C-программы, конструкции, которые, возможно, являются ошибочными, немобильными или излишними. Более строго, чем при компиляции, выполняется проверка соответствия типов. Среди обнаруживаемых дефектов - недостижимые операторы; циклы, в которые входят не с начала; описанные, но не используемые автоматические переменные; логические выражения с константными значениями. Кроме того, проверяется использование функций и обнаруживаются функции, возвращающие значения в одних местах, но не возвращающие в других; функции, вызываемые с различным числом аргументов или с аргументами разных типов; функции, значения которых не используются, и функции, значения которых не возвращаются, но используются.
Файлы-аргументы, имена которых оканчиваются на .c, считаются исходными C-файлами. Аргументы, имена которых оканчиваются на .ln, считаются результатом предыдущих вызовов lint с использованием опций -c или -o. Файлы .ln аналогичны об ектным (.o) файлам, которые создаются командой , если в качестве входных файлов заданы .c файлы. Файлы с другими расширениями игнорируются с выдачей предупреждения.
Программа lint обрабатывает все .c, .ln и llib-lбибл.ln (заданные указанием -l библ) файлы в том порядке, в котором они перечислены в командной строке. По умолчанию lint подсоединяет к концу списка файлов свою стандартную библиотеку C-программ llib-lc.ln. Однако, если используется опция -p, вместо стандартной подсоединяется мобильная C-библиотека программы lint llib-port.ln. Если опция -c не указана, второй проход lint проверяет этот список файлов на взаимную совместимость. В случае задания опции -c файлы .ln и llib-lбибл.ln игнорируются.
Можно указывать произвольное число опций и задавать их в командной строке в любом порядке вперемежку с именами файлов. Следующие опции используются для того, чтобы подавить выдачу некоторых сообщений.
Не выдавать сообщения о присваиваниях long-значений переменным, не специфицированным как long. |
Не выдавать сообщения о недостижимых операторах break. [Программы, сгенерированные при помощи или обычно содержат большое число таких операторов.] |
Не применять набор эвристических тестов, предназначенных для того, чтобы попытаться "поймать" ошибки, улучшить стиль и сделать программу компактнее. |
Не выдавать сообщения о функциях и внешних переменных, используемых, но не определенных или определенных, но не используемых. (Эта опция полезна, когда при обращении к lint задается подмножество файлов, составляющих одну большую программу.) |
Не выдавать сообщения о неиспользуемых параметрах функций. |
Не сообщать о внешних переменных, которые нигде не используются. |
Следующие аргументы изменяют поведение программы lint:
Подключить lint-библиотеку llib lбибл.ln. Если вставить в командную строку -lm, будет подключена lint-версия математической библиотеки llib-lm.ln. Этот аргумент не подавляет использование библиотеки llib-lc.ln. Данные lint библиотеки должны находиться в надлежащем каталоге [см. ниже ФАЙЛЫ]. Опцию можно использовать, чтобы сослаться на локальные lint-библиотеки; она удобна при разработке проектов, состоящих из многих файлов. |
Не проверять совместимость со стандартной или мобильной lint-библиотеками. |
Попытаться проверить возможность переноса на другие диалекты языка C (IBM и GCOS). В сочетании с более строгим контролем данная опция сокращает имена, не являющиеся внешними, до восьми символов, а внешние имена - до шести символов одного размера. |
Если задана эта опция, lint генерирует .ln-файл для каждого .c-файла, указанного в командной строке. Эти .ln-файлы являются результатом только первого прохода программы lint; проверка совместимости функций в них не выполнена. |
Создает lint-библиотеку с именем llib-lбибл.ln. Опция -c отменяет действие опции -o. Созданная lint-библиотека - это файл, который подается на вход второму проходу lint. Действие опции -o заключается в простом сохранении данного файла в указанной lint-библиотеке. Чтобы сформировать библиотеку без посторонних сообщений, следует использовать опцию -x. Опция -v удобна, если исходные файлы для lint-библиотеки состоят из описаний внешних интерфейсов (таким способом, например, создан файл llib-lc). Аналогичный эффект может быть достигнут при помощи "lint-комментариев" (см. ниже). |
На поведение программы lint влияют некоторые специальные комментарии в тексте исходной C-программы:
/*NOTREACHED*/ В соответствующих точках блокирует диагностику о недостижимых операторах. (Этот комментарий обычно помещается сразу после обращений к функциям типа .)
/*VARARGSn*/ Подавляет обычно выполняемую проверку на соответствие количества аргументов для вызова функции, определение которой следует ниже. Проверяются типы данных для первых n аргументов; если n опущено, оно считается равным 0.
/*ARGSUSED*/ Включает опцию -v для следующей функции.
/*LINTLIBRARY*/ В начале файла отключает сообщения о неиспользуемых функциях и аргументах функций в этом файле. Действие эквивалентно использованию опций -v и -x.
Во время первого прохода lint обрабатывает исходные файлы по одному. Сообщения, касающиеся включаемых файлов, накапливаются и печатаются после того, как обработаны все исходные файлы. Затем, если не указана опция -c, собранная информация о всех исходных файлах об единяется и используется для проверки их взаимной совместимости. При этом, если не ясно, относится ли сообщение к исходному файлу или к одному из включенных в него файлов, печатается помеченное вопросительным знаком имя исходного файла.
Опции -c и -o позволяют для набора исходных C-файлов использовать lint в инкрементальном режиме. Обычно для обработки каждого исходного файла пользователь вызывает программу lint с опцией -c. Каждый из этих вызовов формирует .ln-файл, соответствующий .c-файлу, и печатает все сообщения об исходном файле. После того, как все исходные файлы по отдельности обработаны при помощи lint, lint вызывается еще раз (уже без опции -c) с указанием списка всех .ln-файлов и необходимых опций вида -l библ. Данный вызов lint печатает сообщения о всех межфайловых несоответствиях. Такая схема удобна в соединении с использованием ; make может инициировать обработку только измененных исходных файлов.
ФАЙЛЫ
LLIBDIR Каталог, в котором должны нахо- диться lint-библиотеки, укзанные при помощи опции -lбибл. Обычно это /usr/lib. LLIBDIR/lint[12] Программы для первого и второго проходов lint. LLIBDIR/llib-lc.ln Описания библиотечных C-функций в двоичном формате; исходный текст - в LLIBDIR/llib-lc). LLIBDIR/llib-port.ln Описания мобильных функций в дво- ичном формате; исходный текст - в LLIBDIR/llib-port). LLIBDIR/llib-lm.ln Описания математической библиоте- ки в двоичном формате; исходный текст - в LLIBDIR/llib lm). TMPDIR/*lint* Временные файлы.
Обычно каталог TMPDIR - это /usr/tmp, однако данное соглашение можно изменить, присвоив переменной окружения TMPDIR другое значение [см. tempnam( ) в ].
СМ. ТАКЖЕ
, , .
СЮРПРИЗЫ
Функции , и другие, возврата из которых не бывает, программой lint не распознаются. Это может вызвать ложную диагностику. В текущей версии программы lint неработоспособны опции -a, -b, -n.