Мова C в питаннях і відповідях. Частина 6 (FAQ), Різне, Програмні керівництва, статті

17.20 Чому не виконується такий фрагмент?

                char *p = “Hello, world!”;
p[0] = tolower(p[0]);

В: Стрінговие константи не завжди можна модифікувати, за винятком
випадку, коли ними ініціалізується масив. Спробуйте

char a[] = “Hello, world!”;

(Для компіляції старих програм деякі компілятори мають ключ,
який управляє можливістю модифікації стрінгових констант.)
Див також питання 2.1,2.2, 2.8 і 17.2.

Дивись: ANSI Розд. 3.1.4.

17.21 Моя програма аварійно завершується ще до виконання! (Якщо
використовувати відладчик, то видно, що смерть настає ще до
виконання першої інструкції в main).

В: Мабуть, у Вас один або кілька дуже великих (більше кілобайт)
локальних масивів. У багатьох системах розмір стека фіксований,
а операційні системи, в яких здійснюється динамічне
виділення стекової пам’яті, (наприклад, UNIX) можуть бути введені в
оману, коли розмір стека різко збільшується.

Часто краще оголосити великі масиви типу static (якщо,
звичайно, кожен раз при рекурсивному виклику не потрібно свіжий
масив).

(Див. також питання 9.4).

17.22 Що означають повідомлення “Segmentation violation” і “Bus error”?

В: Це означає, що програма намагається отримати доступ до неіснуючої
або забороненої для неї області пам’яті. Це постійно відбувається
через неініціалізованих або невірно ініціалірованних покажчиків
(Див. питання 3.1, 3.2), з вини malloc (див. питання 17.23) або, може
Можливо, scanf (див. питання 11.3).

17.23 Моя програма аварійно завершується, очевидно, при виконанні malloc,
але я не бачу в ній нічого поганого.

В: На жаль, дуже легко зруйнувати внутрішні структури даних,
створювані malloc, а виникаючі проблеми можуть бути важкі для
налагодження. Найчастіше проблеми виникають при спробі записати більше
даних, ніж може вміститися в пам’яті, виділеної malloc; особливо
поширена помилка malloc (strlen (s)) замість strlen (s) + 1.
Інші проблеми включають звільнення покажчиків, отриманих не
в результаті виконання malloc, або спроби застосувати функцію
realloc до нульового вказівником. (Див. питання 3.12).

Існує кілька налагоджувальних пакетів, щоб допомогти відстежити
виникають при застосуванні malloc проблеми. Один з найпопулярніших –
“Dbmalloc” Конора П. Кахілла, (Conor P. Cahill) поміщений в
comp.sources.misc у вересні 1992. Інші – це “leak” поміщений в
тому 27 архіву comp.sources.unix, JMalloc.c і JMalloc.h в сборіке
Fidonet Snippets (шукайте за допомогою archie; див. також питання 17.2); і
MEMDEBUG – див ftp.crpht.lu в pub / sources / memdebug.
Див також питання 17.12.

17.24 Є у когось комплект тестів для С компілятора?

В: Плюм Холл (Plum Hall) (раніше працював в Кардифі, Нью Джерсі, тепер
Гаваї) продає такий комплект. Дистрибутив GNU C (gcc) від FSF
включає c-torture-test.tar.Z який виявляє багато проблем,
виникають при використанні компіляторів. Тест Кагана (Kahan) під
назвою paranoia, який знаходиться в директорії netlib / paranoia на
netlib.att.com інтенсивно тестує операції з плаваючою крапкою.

17.25 Де дістати граматику С для програми YACC?

В: Найнадійніша – звичайно ж граматика зі стандарту ANSI. Інша
граматика, підготовлена ​​Джимом Роскіндом (Jim Roskind), знаходиться
на ics.uci.edu в директорії pub / * grammar *. Одягнений в плоть,
працюючий зразок ANSI граматики (належить Джефу Лі (Jeff Lee))
знаходиться на uunet (див. питання 17.12) в директорії
usenet / net.sources / ansi.c.grammar.Z (разом з лексичним
аналізатором). У компіляторі GNU C від FSF є граматика, так само як
Тобто вона в додатку до книги K & R II.

Дивись: ANSI Розд. A.2.

17.26 Мені необхідний вихідний текст для розбору і обчислення формул.

В: Є два доступних пакета – “defunc”, поміщений в comp.source.misc
в грудні 1993 р. (V41 i32, 33), в alt.sources в січні 1994 р.,
його можна отримати через ftp sunsite.unc.edu в директорії
pub/packages/development/libraries/defunc-1.3.tar.Z; і
пакет “parse” в lamont.ldgo.columbia.edu.

17.27 Мені необхідна функція типу strcmp, але для приблизного
порівняння, щоб перевірити два рядки на близькість, але не на
тотожність.

В: Звичайно такі порівняння включають алгоритм “soundex”, який
ставить у відповідність схоже звучить словами один і той же числовий
код. Цей алгоритм описаний в томі “Сортування і пошук” класичної
книги Дональда Кнута “Мистецтво програмування для ЕОМ”.

17.28 Як за датою знайти день тижня?

В: Використовуйте mktime (див. питання 12.6 і 12.7) або співвідношення
Зеллера (Zeller), або спробуйте ось цю функцію, вміщену Томохіко
Сакамото (Tomohiko Sakamoto):

dayofweek (y, m, d) / * 0 = Неділя * /
int y, m, d; / * 1 <= m <= 12, y> 1752 (приблизно) * /
  {
       static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
       y -= m < 3;
       return (y + y/4 – y/100 + y/400 + t[m-1] + d) % 7;
  }

17.29 2000-й рік буде високосним? (Рік% 4 == 0) – правильний тест на
високосний рік?

В: Так і ні відповідно. Ось повної тест для Григоріанського
календаря:

year % 4 == 0 && (year % 100 != 0 // year % 400 == 0)

17.30 Як вимовляти “char”?

В: Ключове слово С “char” можна вимовляє трьома способами:
як англійські слова “char,” “care,” or “car;”. Вибір за Вами.

17.31 Які є хороші книги для вивчення С?

В: Мітч Райт (Mitch Wright) підтримує анотовану бібліографію
книг по С та по UNIX, вона доступна через ftp ftp.rahul.net в
директорії pub / mitch / YABL.

17.32 Чи можна отримати книги по С через Інтернет?

В: Можна, по крайней мере, дві:

“Notes for C programmers,” Крістофера Соутелла,
(Christopher Sawtell) доступна через
svr-ftp.eng.cam.ac.uk:misc/sawtell_C.shar
garbo.uwasa.fi:/pc/c-lang/c-lesson.zip
paris7.jussieu.fr:/contributions/docs

“C for Programmers,” Тіма Лову (Tim Love)
доступна через
svr-ftp.eng.cam.ac.uk в директорії misc.

17.33 Де знайти інші варіанти цих питань і відповідей? Доступні
Чи більш ранні редакції?

В: пошарте по Мережі. Зазвичай ці питання і відповіді розміщуються в
comp.lang.c першого числа кожного місяця, зі значенням поля Expires,
дозволяє бути присутнім в comp.lang.c весь місяць. Там же
є скорочена версія, що представляє собою список змін,
супроводжуючий суттєво оновлену версію. Такі списки можна
так же знайти в comp.answers і news.answers. Кілька серверів ведуть
архіви повідомлень, які розміщені в news.answers, а також списків часто
запитань (FAQ), включаючи і цей. Ось два сервера
rtfm.mit.edu (директорії pub / usenet / news.answers / C-faq / і
pub / usenet / comp.lang.c /) і ftp.uu.net (директорій
usenet / news.answers / C-faq /). Сервер archie повинен допомогти знайти
інші архіви; сделайті запит на “prog C-faq”. Додаткову
інформацію можна знайти в списку meta-FAQ в news.answers; див. також
питання 17.12.

Цей документ – постояннио розширюється список питань, які
часто задавалися з часів Великого Перейменування, а не колекція
питань, які були цікаві в цьому місяці. Попередні версії
цього документа застаріли, і в них немає нічого цікавого за
винятком випадкових орфографічних помилок, яких в даній версії
вже немає.

Бібліграфія

ANSI American National Standard for Information Systems —
Programming Language – C, ANSI X3.159-1989 (див. питання 5.2).

JLB Jon Louis Bentley, Writing Efficient Programs, Prentice-Hall,
1982, ISBN 0-13-970244-X.

H&S Samuel P. Harbison and Guy L. Steele, C: A Reference Manual,
        Second Edition, Prentice-Hall, 1987, ISBN 0-13-109802-0.
(Скоро з’явиться третє видання.)

PCS Mark R. Horton, Portable C Software, Prentice Hall, 1990,
ISBN 0-13-868050-7.

EoPS Brian W. Kernighan and P.J. Plauger, The Elements of Programming
Style, Second Edition, McGraw-Hill, 1978, ISBN 0-07-034207-5.
Російський переклад: Б.Керніган, Ф.Плоджер “Елементи стилю
програмування “, Радіо і зв’язок, 1984, 160 стор

K&R I   Brian W. Kernighan and Dennis M. Ritchie, The C Programming
Language, Prentice-Hall, 1978, ISBN 0-13-110163-3.
Російський переклад: Керніган Б., Рітчі Д. “Мова програмування
С “, М.: Фінанси і статистика, 1985.

K&R II  Brian W. Kernighan and Dennis M. Ritchie, The C Programming
Language, Second Edition, Prentice Hall, 1988, ISBN 0-13-
110362-8, 0-13-110370-9.
Російський переклад: Б.Керніган, Д.Рітчі “Мова програмування С”,
М.: Фінанси і статистика, 1992.

Knuth   Donald E. Knuth, The Art of Computer Programming, (3 vols.),
Addison-Wesley, 1981.
Російський переклад: Д.Кнута “Мистецтво програмування для ЕОМ”,
т.1 Основні алгоритми (М.: Мир, 1976), т.2 Получісленние алгоритми
(М.: Мир, 1977), т.3 “Сортування і пошук”, (М.: Мир, 1978)

CT&P    Andrew Koenig, C Traps and Pitfalls, Addison-Wesley, 1989,
ISBN 0-201-17928-8.

P.J. Plauger, The Standard C Library, Prentice Hall, 1992,
ISBN 0-13-131509-9.

Harry Rabinowitz and Chaim Schaap, Portable C, Prentice-Hall,
1990, ISBN 0-13-685967-4.

Більш детальну бібліографію можна знайти в переробленому керівництві
за стилем Indian Hill (див. питання 14.3, а також питання 17.31).

Подяки

Дякуємо наступним людям:
Jamshid Afshar, Sudheer Apte, Randall Atkinson, Dan Bernstein,
Vincent Broman, Stan Brown, Joe Buehler, Gordon Burditt, Burkhard Burow,
Conor P. Cahill, D”Arcy J.M. Cain, Christopher Calabrese, Ian Cargill,
Paul Carter, Billy Chambless, Raymond Chen, Jonathan Coxhead, Lee
Crawford, Steve Dahmer, Andrew Daviel, James Davies, Jutta Degener, Norm
Diamond, Jeff Dunlop, Ray Dunn, Stephen M. Dunn, Michael J. Eager, Dave
Eisen, Bjorn Engsig, Chris Flatters, Rod Flores, Alexander Forst, Jeff
Francis, Dave Gillespie, Samuel Goldstein, Alasdair Grant, Ron
Guilmette, Doug Gwyn, Tony Hansen, Joe Harrington, Guy Harris, Elliotte
Rusty Harold, Jos Horsmeier, Blair Houghton, Ke Jin, Kirk Johnson, Larry
Jones, Kin-ichi Kitano, Peter Klausler, Andrew Koenig, Tom Koenig, Ajoy
Krishnan T, Markus Kuhn, John Lauro, Felix Lee, Mike Lee, Timothy J.
Lee, Tony Lee, Don Libes, Christopher Lott, Tim Love, Tim McDaniel,
Stuart MacMartin, John R. MacMillan, Bob Makowski, Evan Manning, Barry
Margolin, George Matas, Brad Mears, Bill Mitchell, Mark Moraes, Darren
Morby, Ken Nakata, Landon Curt Noll, David O”Brien, Richard A. O”Keefe,
Hans Olsson, Philip (lijnzaad@embl-heidelberg.de), Andrew Phillips,
Christopher Phillips, Francois Pinard, Dan Pop, Kevin D. Quitt, Pat
Rankin, J. M. Rosenstock, Erkki Ruohtula, Tomohiko Sakamoto, Rich Salz,
Chip Salzenberg, Paul Sand, DaviD W. Sanderson, Christopher Sawtell,
Paul Schlyter, Doug Schmidt, Rene Schmit, Russell Schulz, Patricia
Shanahan, Peter da Silva, Joshua Simons, Henry Spencer, David Spuler,
Melanie Summit, Erik Talvola, Clarke Thatcher, Wayne Throop, Chris
Torek, Andrew Tucker, Goran Uddeborg, Rodrigo Vanegas, Jim Van Zandt,
Wietse Venema, Ed Vielmetti, Larry Virden, Chris Volpe, Mark Warren,
Larry Weiss, Freek Wiedijk, Lars Wirzenius, Dave Wolverton, Mitch
Wright, Conway Yee, і Zhuo Zang, хто явно чи неявно вніс вклад в цей
документ.

Окремо хочу подякувати Карла Хойера (Karl Heuer) і особливо
Марка Бредер (Mark Brader), хто, говорячи словами Стіва Джонсона,
(Steve Johnson) “в безжальному прагненні покращити цей документ
вів мене не тільки за межі моїх бажань, а й за межі
моїх можливостей “.

 

Авторські права на цей документ належать Стіву Саміту (Steve Summit),
1988, 1990-1995. Документ можна вільно поширювати поки в ньому
присутній ім’я автора і ці рядки. Уривки З програм в цьому документі
(Vstrcat (), error (), і т.д.) відносяться до загальнодоступних і можуть використовуватися
без обмежень.


Закінчення.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*