LINUX.ORG.RU
ФорумTalks

K&R кто как проходил?

 , ,


2

1

Здравствуйте. Я где то скачал издание 3 в PDF. Скопипастил пример 1.5.4, подсчёт слов. Обнаружил ошибку «unrecognized character \xd1». Перепечатал строку - ошибка исчезла. Затем обнаружил незакрытую скобку. Затем сравнение разных типов, заменил " на ’. Стало собираться. Компилятор использую tcc. Занимаюсь под офтопиком, с соответствующей системной кодировкой (она то ли 1251 то ли юникод то ли cp866 в консоли в общем чёрт разберёт, хоть вроде и десятка. Я за всем этим не слежу). Редактор - вим. В целом содержание книги понятно написано. Что то я в общих чертах понимаю. Просто хотелось провести вечер - потренироваться. Скажите, кто как читает эту книгу? Меня удивило столько ошибок в коде. Может быть это связано с копипейст из PDF, может с офтопиком, под которым я сижу (не спрашивайте почему у меня там основная работа, мне так удобно). Может у кого то есть примеры кода из третьего издания, которые компилируются без ошибок? Просто не хочется тратить время на идиотизм. Хотя зачем тогда они нужны… Кто как учился? Какие среды использовал? GCC нет под рукой а монстр типа визуалстудио использовать неохота (там много что про него надо знать). Извините за сумбур. Хотел просто скоротать вечер. Издание 2 - не рекомендуйте. Там всё почему то капслоком. Или в издании 1. Короче у меня 3 и PDF и бумага.

★★★

Последнее исправление: baaba (всего исправлений: 2)

Здравствуйте

Здравствуйте!

под офтопиком

До свидания!

anonymous_sapiens ★★★★★
()

Меня удивило столько ошибок в коде

Это нормально для книг по программированию. Поэтому нужно держать под рукой ещё и гугл с парой форумов по кодингу.

alex1101
()

Просто займись гуманитарными темами !!
блохеры вон мильёны лопатами гр ебут !!

я видел тупые ошибки в кодах оф.библиотек и оф.схемах :)
предполагаю все таки это проверка на вшивость/глупость.
дабы (м)ученик не только тупо вливал в себя знания но и хотя б слехка ворочал оставшимися после тиктока извилинами…

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 2)
Ответ на: комментарий от Anoxemian

Просто я могу все примеры из книги проверить или часть. Но думал что уже кто то это делал. Можно их опубликовать, может кому будет полезно. Наверняка уже всё это есть. Странно что в такой уважаемой книге есть ошибки в коде. Или это просто моя кривизна рук. Надо не PDF издание использовать а Tex версию или что то подобное. То есть в моём понимании в таком уважаемом издании должна быть электронная версия где все примеры работают.

baaba ★★★
() автор топика
Последнее исправление: baaba (всего исправлений: 1)

Слова читай, а код пиши. Копипастить не надо. Но даже если и копипастишь с последующими исправлениями это даже в пользу, учишься исправлять код, учишься воспринимать ошибки компилятора и прочее. Никто не пишет сразу рабочий код, все пишут, запускают, видят ошибку исправляют и снова запускают. Дай бог чтобы компилятор ругнулся ещё, если у тебя всё запустилось сразу это подозрительно и подозрение это должно привиться с программистских яслей ибо самая страшная ошибка это логическая .

Просто не хочется тратить время на идиотизм.

Перепечатывай код, надо привыкать его самому писать. По началу хотя бы перепечатывая. Как думаешь учились другие имея на руках только книжку бумажну? Ну вот и.

Желательно каждый пример ещё видоизменять пробовать, смотреть что будет, экспериментировать из разряда «а что будет если!?» в тебе же есть этот огонёк?

С кодом на первых порах можно и нужно играть, но только после того как ты усвоил главу. Играть между главами/темами/примерами. А не во время.

P.S Я K&R так и не дочитал :D Меня сразу увело в свои поделки как только узнал базовые вещи, а дальше автопилот и метод проб и ошибок, это плохо, но было интересно! Но важно помнить что программировать я так и не научился, так что штудить от корки до корки и не торопиться, а то будешь как я не туды не сюды, вроде что-то знаешь, но это так крапинки от общей картины. Хотя тоже полезно немножечко просто знать для кругозора. Вопрос лишь в том тебе просто так или прям научиться.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от LINUX-ORG-RU

В общем понял что перепечатывать код незазорно. Если припрёт - на гитхабе уже есть эти примеры. Поленился я гуглить, мне хотелось понять как кто учился. Всем спасибо!

baaba ★★★
() автор топика

Третьего издания этой книги не существует, если что. А так все норм, ты на коне.

untitl3d
()
Ответ на: комментарий от baaba

В общем понял что перепечатывать код незазорно.

Это крайне полезно. При обучении чем больше кода ты пишешь тем лучше, не важно как сам или перепечатка или исправление чужого кода. Всё это часть программизма, работа с кодом.

Только заранее привыкай именовать файлы в которых ты пишешь код нормально, а не asd.c www.c и не удаляй свой код, для каждого примера или эксперимента создавай каталог отдельный с читаемым названием. Ты неизбежно будешь забывать «а как я такое делал? Зобыл» и сможешь вернуться к своему же коду подсмотреть. Или можешь узнать новое, вернуться к прошлому коду и улучшить его, ускорить или расширить возможности. Не удаляй свой код и код своих экспериментов. И организуй аккуратное хранение этого кода. Морока? Нет! Сам себе спасибо скажешь ещё. Каждый новый (разный) код в отдельном каталоге и файле тебе чисто психологически будет комфортнее и приятнее.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Спасибо за совет. Буду потихоньку двигаться.

baaba ★★★
() автор топика
Ответ на: комментарий от Zhbert

Это тоже не всегда помогает. Я на прошлой неделе пытался читать книгу одного индуса про алгоритмы - так там, сука, в коде опечатки и ошибки. Причём даже мне было сразу понятно, что что-то не так. При этом книга позиционируется как для полных новичков. Да полный новичок кукухой съедет от такого обучения.

alex1101
()
Ответ на: комментарий от alex1101

Это ты еще не читал книги по схемотехнике и усилителям 2000+ года выпуска. Там ошибок и неверной информации больше, чем фактов.

untitl3d
()
Ответ на: комментарий от baaba

Странно что в такой уважаемой книге есть ошибки в коде.

Intended behaviour. В книге можно даже найти приписку автора, что ошибки намеренные, чтобы неучи не копировали код не разбираясь.

PPP328 ★★★★★
()

K&R надо проходить на симуляторе PDP-11 под UNIX 7, прочитав перед этим первую главу из Пайка.

luke ★★★★★
()
Ответ на: комментарий от alex1101

Скорее всего

  • Кривой OCR слой
    +
  • K&R 2nd ed. использует c89, который по умолчанию новые версии компиляторов не используют
grem ★★★★★
()

Ну, какое именно издание стоит на полочке, я прямо сейчас не отвечу — лень с дивана вставать.
Но точно — нету CapsLock'ов.
Как проходил?
Пока никак. Примеряюсь. ))

По поволу очепяток. В принципе на сегодня это норма. Издательства лагают, и ничего с этим не поделать.

За оффопик особенно не переживай: на ЛОР'е это основная рабочая ОС, кто бы чего не говорил.

sparkie ★★★★★
()
Последнее исправление: sparkie (всего исправлений: 1)

столько ошибок в коде. Может быть это связано с копипейст из PDF

Да, при вёрстке книг частенько любят заменять символы на похожие. Так что никакого копипаста, только перепечатывать, только хардкор.

У меня тут более интересная фиговина происходит: char hello[] = "hello, world"; валится с сегфолтом. Просто объявление, никаких манипуляций с массивом, никакой кириллицы. Собираю мейком с умолчальными правилами, никаких опций/флагов не устанавливал, канпелятор gcc (наверное): cc 01-constants.c -o 01-constants.

Wtf? Anyone?

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)

Подозреваю, что там не ошибки в коде, а ошибки распознавания текста. Если простой текст ещё можно вычитать и проверить на орфографию, то в коде никто ничего исправлять не будет. Так что копипаста в этом случае не подойдет.

imul ★★★★★
()
Ответ на: комментарий от sparkie

на ЛОР’е это основная рабочая ОС, кто бы чего не говорил.

Причём здесь рабочая? Это что-то доказывает?

кто бы чего не говорил

Лови клоуна :D Взял и весь ресурс со всеми людьми поделил на ноль за то что некоторых обязывают работать с маздаем на работе… Доколе?

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

рабочая

Это я к тому, что ТС прямо указал, что его рабочая ОСь — оффтопик и первые каменты носили хейтерский характер.

Лови клоуна

А ты с чего всполошился-то? :-D

sparkie ★★★★★
()
Ответ на: комментарий от sparkie

Это я к тому, что ТС прямо указал, что его рабочая ОСь

Досуг за работой не проводят. Под рабочей подразумевается то что на работе. Но если ты имел в виду что тут у всех домашняя система это винда то я ещё раз клоуна поставлю!1!!

и первые каменты носили хейтерский характер.

Всё правильно. Это юмор такой. Никто ТС не ругал.

А ты с чего всполошился-то? :-D

Да потому что ты сообщество по интересам линукса прописал в виндузятники. Это как придти на форум про виндовс и сказать, ой да ладно на самом деле тут все линуксоиды поэтому… бла бла.

А ты с чего всполошился-то? :-D

За то что меня записали не туда и сказали что моё слово ничего не значит, что бы я не говорил. УтЪютъ! Низаконно, апасна, пратистую :D

Нет бы сказал, «тут многие используют оффтопик», ан нет тут все используют как рабочую. А линуксы так, в виртуалке погонять раз в пол годика. Да пофиг сколько там полгодика или день. Просто формулировка у тебя такая что я взбунтовался и сожрал две конфеты вместо одной. Второй чай теперь пить пустой… Всю жизнь мне испортил! На Марсе цививилизацию тоже не удивлюсь что ты погубил! И на Венере тоже!

Всё, я всех собак на тебя спустил! Извиняюсь!

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

проходили по бумажной книге, OCR-копипастой не пользовались /thread

caryoscelus
()
Ответ на: комментарий от LINUX-ORG-RU

если ты имел в виду

Если. Если бы я так считал, то так бы и написал.

Влажно фантазируете, товарищ?

Извиняюсь!

Ничего.

sparkie ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

недоговариваешь

Воистину так. Забыл в соседней функции переменную цикла инициализировать нулём перед использованием, и при попытке её использовать как индекс массива происходил сеанс магии с разоблачением.

Что характерно, в таком виде эта функция в K&R и красуется, и это по-любому не случайно %)

/* strlen: return length of s */
int strlen(char s[])
{
  int i;
  while (s[i] != '\0')
    ++i;
  return i;
}

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Nervous

Глобальные и статические переменные стандартом 89/99 принудительно индустриализуются как 0 ибо хранятся они в .bss в .data загруженного исполняемого файла, а не в стеке или куче. Переменные с автоматическим скором жизни (на стеке) будучи неопределенны явно имеют неопределённое значение (просто мусор который в ячейке памяти лежал до её взятия).

Исходя из этого и того что .bss и .data о которых ты в целом вообще знать не должен и тебе глубоко должно быть на них по баробану могут быть отредактированы и вообще.

Тупо инициализируй всегда и всё. Исключение это данные которые ты будешь целиком заполнять, их просто нет смысла сначала записывать нулями, а затем чем-то ещё.

Но в целом, инициализируй всё и всегда. Так ты обеспечишь как минимум корректность на уровне данных. И уже потом можно будет (всегда можно) выкинуть многие бесполезные инициализации.

Я долгое время свято верил что всё выделяемое на стеке всегда равно нулям. Не знаю почему =)

Если при любом раскладе возникают сомнения (не это случай только, а вообще) рожай в голове мысль на время Всё что не явно то UB порой надеешься на что-то, а оно не то, компилёр с причудами, флаги какие или ещё что. Потом эту мысль можно выкинуть. Но если что сразу про неё вспоминать и делать правки в поиске истины следуя за этой мыслью неуклонно.

Сам не умею ничего вот и учу =)

Чем больше сишников тем лучше. Учи учи и не сдавайсо!

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Тупо инициализируй всегда и всё.

А то привыкли в своих скриптожабах, что им всё на тарелочке приносят (и мусор за ними выносят)! %)

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Nervous

Именно. Для мелочей оно полезно. Инициализация инта с автоматическим приведением к нулю ячеек памяти выглядит здраво. Но!! Выделил ты 10 метров памяти для заполнения, нет никакого смысла их чистить перед выдачей или использованием.

В Сишечке Ълапушке делается ровно то что конкретно нужно и всё. В том и прелесть.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Чем больше сишников тем лучше

Я не настоящий сишник, просто освежить азы, чтобы не смотреть в исходник как баран на новые ворота, если вдруг чо. Ну и конспектик надо сделать, чтобы в будущем освежение быстрее происходило %)

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Ну и что, сейчас втянешься и будешь игру делать, продашь тонну копий выкатишь под AGPLv3 и уедешь в купленный особняк с тремя туалетами где можно сидя на троне в VR читать ЛОР и рассказывать про адресную арифметику новоприбывшему стесняющемуся новорегушке который чуть не плача пишет "Почему int * ptr=0; ptr+=1; равно 4!!!? ".

LINUX-ORG-RU ★★★★★
()

копипаст вредно..тем более в vim, тем паче из pdf и уж тем более в оффтопик..

K&R не виноват :-) книги читают, программы пишут. И всё самостоятельно

MKuznetsov ★★★★★
()

Кто как учился?

не читал K&R. Читал более современные книги. Страуструпа и сразу о C++ (хотя, не рекомендую его, т.к. слишком ботанисто пишет для новичков). Примеры пробовал на Visual Studio 6.0, т.к. тогда ещё о Линуксе не знал.

Меня удивило столько ошибок в коде.

скажи спасибо, что pdf есть. В 21м веке вообще в печатных изданиях полно ошибок в коде. А ещё умники всякие, которые тесты на C++ составляют, такую ересь несут в исходники вопросов, которая просто грамматически ошибочна, не скомпилируется нигде.

seiken ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)