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) файлам, которые создаются
командой cc(1), если в качестве входных файлов заданы
.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 игнорируют-
ся.
Можно указывать произвольное число опций и задавать их
в командной строке в любом порядке вперемежку с именами
файлов. Следующие опции используются для того, чтобы
подавить выдачу некоторых сообщений.
-a Не выдавать сообщения о присваиваниях long-значе-
ний переменным, не специфицированным как long.
-b Не выдавать сообщения о недостижимых операторах
break. [Программы, сгенерированные при помощи
lex(1) или yacc(1) обычно содержат большое число
таких операторов.]
-h Не применять набор эвристических тестов, предназ-
наченных для того, чтобы попытаться "поймать"
ошибки, улучшить стиль и сделать программу ком-
пактнее.
-u Не выдавать сообщения о функциях и внешних пере-
менных, используемых, но не определенных или опре-
деленных, но не используемых. (Эта опция полезна,
когда при обращении к lint задается подмножество
файлов, составляющих одну большую программу.)
-v Не выдавать сообщения о неиспользуемых параметрах
функций.
-x Не сообщать о внешних переменных, которые нигде не
используются.
Следующие аргументы изменяют поведение программы lint:
-l библ
Подключить lint-библиотеку llib lбибл.ln. Если
вставить в командную строку -lm, будет подключена
lint-версия математической библиотеки llib-lm.ln.
Этот аргумент не подавляет использование библиоте-
ки llib-lc.ln. Данные lint библиотеки должны нахо-
диться в надлежащем каталоге [см. ниже ФАЙЛЫ]. Оп-
цию можно использовать, чтобы сослаться на локаль-
ные lint-библиотеки; она удобна при разработке
проектов, состоящих из многих файлов.
-n Не проверять совместимость со стандартной или мо-
бильной lint-библиотеками.
-p Попытаться проверить возможность переноса на дру-
гие диалекты языка C (IBM и GCOS). В сочетании с
более строгим контролем данная опция сокращает
имена, не являющиеся внешними, до восьми символов,
а внешние имена - до шести символов одного разме-
ра.
-c Если задана эта опция, lint генерирует .ln-файл
для каждого .c-файла, указанного в командной стро-
ке. Эти .ln-файлы являются результатом только пер-
вого прохода программы lint; проверка совместимос-
ти функций в них не выполнена.
-o библ
Создает lint-библиотеку с именем llib-lбибл.ln.
Опция -c отменяет действие опции -o. Созданная
lint-библиотека - это файл, который подается на
вход второму проходу lint. Действие опции -o зак-
лючается в простом сохранении данного файла в ука-
занной lint-библиотеке. Чтобы сформировать библио-
теку без посторонних сообщений, следует использо-
вать опцию -x. Опция -v удобна, если исходные фай-
лы для lint-библиотеки состоят из описаний внешних
интерфейсов (таким способом, например, создан файл
llib-lc). Аналогичный эффект может быть достигнут
при помощи "lint-комментариев" (см. ниже).
Распознаются также опции -D, -U, -I команды cpp(1) и
опции -g, -O команды cc(1), если они заданы в виде от-
дельных аргументов. Опции -g и -O игнорируются, однако
сама возможность их задания делает поведение команды
lint в большей мере похожим на cc(1). Остальные опции
игнорируются с предупреждающими сообщениями. Определен
символ препроцессора lint, что позволяет изменять или
делать невидимыми для lint некоторые сомнительные фраг-
менты программы. Поэтому lint следует рассматривать как
зарезервированное ключевое слово во всех программах,
которые предполагается проверять при помощи lint.
На поведение программы lint влияют некоторые специаль-
ные комментарии в тексте исходной C-программы:
/*NOTREACHED*/
В соответствующих точках блокирует диагностику о
недостижимых операторах. (Этот комментарий обычно
помещается сразу после обращений к функциям типа
exit(2).)
/*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(1); 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( ) в
tmpnam(3S)].
СМ. ТАКЖЕ
cc(1), cpp(1), make(1).
СЮРПРИЗЫ
Функции exit(2), setjmp(3C) и другие, возврата из кото-
рых не бывает, программой lint не распознаются. Это мо-
жет вызвать ложную диагностику. В текущей версии прог-
раммы lint неработоспособны опции -a, -b, -n.
|