15.5.3. Современная lint
15.5.3. Современная lint
В оригинальном С компилятор не мог проверить, соответствуют ли параметры, переданные в вызове функции, списку параметров в определении функции; прототипов не было. Это часто вело к неуловимым ошибкам, поскольку ошибочный вызов функции мог вызывать лишь частично ошибочные результаты, которые проходили незамеченными во время тестирования, или мог даже вообще не появиться во время тестирования. Например:
if (argc < 2)
fprintf ("usage: %s [ options ] files ", argv[0]);
/* отсутствует stderr */
Если программа, содержащая этот фрагмент, никогда не вызывается с ошибочным числом аргументов, fprintf(), в которой отсутствует первый аргумент FILE*, также никогда не вызывается.
Программа V7 lint была предназначена для решения таких проблем. Она делала два прохода через все файлы программы, сначала собирая сведения об аргументах функций, а затем сравнивая вызовы функций с собранной информацией. Особые файлы «библиотеки lint» предоставляли сведения о функциях стандартных библиотек, так что их также можно было проверить, lint проверяла также другие сомнительные конструкции.
С появлением в стандартном С прототипов необходимость в lint уменьшилась, но не исчезла совсем, поскольку C89 все еще допускает объявления функций в старом стиле.
extern int some_func(); /* Список аргументов неизвестен */
Вдобавок, многие другие аспекты программы можно проверять статически, т.е. путем анализа исходных текстов.
Программа splint (Secure Programming Lint — Lint для безопасного программирования)[186] является современным обновлением lint. Она предусматривает слишком много опций и возможностей, чтобы перечислять их здесь, но ее стоит исследовать.
Следует знать об одной особенности подобных lint программ, которая заключается в том, что они выводят целый поток предупреждающих сообщений. Многие из сообщаемых предупреждений в действительности безвредны. В таких случаях инструменты допускают использование специальных комментариев, сообщающих. «Да, я знаю об этом, это не проблема», splint лучше всего работает, когда вы предоставляете в своем коде большое количество подобных примечаний.
splint является мощным, но сложным инструментом; выделение некоторого времени на изучение его использования, а затем частое его использование поможет сохранить ваш код ясным.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Глава 8 Современная система управления проектами Microsoft Project 2007
Глава 8 Современная система управления проектами Microsoft Project 2007 В состав пакета Microsoft Office 2007 включено мощное средство управления проектами – программа Microsoft Project 2007. С ее помощью вы можете вести учет, анализ, управлять самыми разными проектами – как относительно небольшими
Софтерра: Современная монадология
Софтерра: Современная монадология Автор: Сергей Поляков alexei@samara.netВ те давние времена, когда перфосчитка перестала быть основным устройством ввода информации, а ее место заняла клавиатура, когда появились первые мониторы, а о «манипуляторе мышь» никто и слыхом не
Amazon S3, паролемания и современная интерпретация метафоры Неуловимого Джо Сергей Голубицкий
Amazon S3, паролемания и современная интерпретация метафоры Неуловимого Джо Сергей Голубицкий Опубликовано 01 апреля 2013 Amazon S3 (Simple Storage Service) был запущен в 2006 году и с тех пор прочно закрепился в категории де-факто стандарта облачных услуг для
Криптоанархия и виртуальные сообщества Современная криптография Тимоти Мэй[19]
Криптоанархия и виртуальные сообщества Современная криптография Тимоти Мэй[19] За два прошедших десятилетия в криптографии (сокращенно крип-то), науке создания шифров и кодов, произошла революция. Помимо обычных шифров, полезных, главным образом, для сохранения
На что способна современная видеокамера Алексей Поляков
На что способна современная видеокамера Алексей Поляков ОпубликованоАлексей Поляков Пылесосить должен пылесос, выживать сок — соковыжималка, а снимать видео видеокамера, не так ли? Однако в наш век гаджетов — устройств, сочетающих в себе все и