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.