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.