Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
function sort: sort
An unconstrained function is called in a function body where
modifications are checked. Since the unconstrained function may modify
anything, there may be undetected modifications in the checked function.
(Use -modunconnomods to inhibit warning)
debug0.c:36:17: Return value (type int) ignored: sort(array, 5)
Result returned by function call is not used. If this is intended, can
cast result to (void) to eliminate message. (Use -retvalint to inhibit
warning)
debug0.c:37:14: Path with no return in function declared to return int
debug0.c:6:18: Variable exported but not used outside debug0: array
A declaration is exported, but not used outside this module. Declaration
can use static qualifier. (Use -exportlocal to inhibit warning)
debug0.c:14:13: Function exported but not used outside debug0: sort
debug0.c:15:17: Definition of sort
debug0.c:6:18: Variable array exported but not declared in header file
A variable declaration is exported, but does not appear in a header
file. (Used with exportheader.) (Use -exportheadervar to inhibit warning)
debug0.c:14:13: Function sort exported but not declared in header file
A declaration is exported, but does not appear in a header file. (Use
-exportheader to inhibit warning)
debug0.c:15:17: Definition of sort
Finished checking - 22 code warnings
$
Утилита выражает неудовольствие по поводу объявления функций в старом стиле (не ANSI) и несоответствия типов значений, возвращаемых функциями, и самими величинами, которые они возвращают (или нет) в действительности. Эти предупреждения не влияют на работу программы, но должны быть выведены.
Она также обнаружила две реальные ошибки в следующем фрагменте кода:
/* 18 */ int s;
/* 19 */
/* 20 */ for(; i < n & s != 0; i++) {
/* 21 */ s = 0;
Средство splint определило (выделенные цветом строки предыдущего вывода), что переменная
s
&
&&.
Обе эти ошибки были исправлены при чтении исходного текста программы до запуска процесса отладки. Несмотря на то, что пример мало изобретателен и служит только для демонстрации, подобные ошибки регулярно возникают в реальных программах."
Средства, отслеживающие вызовы функций
Три утилиты —
ctags
cxref
cflow
Эти утилиты и другие, упоминаемые в этой главе, могут не входить в состав вашего дистрибутива Linux. Если они пропущены, можно поискать их реализации в Интернете. Хорошая отправная точка (для дистрибутивов Linux, поддерживающих формат RPM-пакетов) — Web-сайты http://rpmfind.net и http://rpm.pbone.net. Можно попытаться поискать в нескольких репозитариях для конкретных дистрибутивов, включая http://ftp.gwdg.de/pub/opensuse/ для openSUSE, http://rpm.livna.org для Fedora и http://packages.slackware.it/ для Slackware.
Программа
ctags
<b>ctags [-a] [-f <i>filename</i>] <i>sourcefile sourcefile ...</i></b>
<b>ctags -x <i>sourcefile sourcefile ...</i></b>
По умолчанию
ctags
announce app_ui.c /^static void announce(void) /
Каждая строка файла содержит имя функции, файл, в котором она объявлена, и регулярное выражение, которое можно использовать для поиска описания функции в файле. Некоторые редакторы, например Emacs, могут применять файлы этого вида для навигации в исходном тексте программы.
Кроме того, с помощью опции
-х
ctags
find_cat 403 appui.с static cdc_entry find_cat(
Можно перенаправить вывод в другой файл с помощью опции
-f filename
-а
Программа
cxref
#define
SYMBOL FILE FUNCTION LINE
BASENID prog.с -- *12 *96 124 126 146 156 166
BINSIZE prog.с -- *30 197 198 199. 206
BUFMAX prog.с -- *44 45 90
BUFSIZ /usr/include/stdio.h -- *4
EOF /usr/include/stdio.h -- *27
argc prog.с -- 36
prog.с main *37 61 81
argv prog.с -- 36
prog.с main *38 61