Некоторые вещи, которые каждый С программист должен знать о С

Автор Nikolai, 04 Квітень 2008, 23:36:43

Попередня тема - Наступна тема

Nikolai

Вот нарыл в нете(http://ko.itc.ua/node/34237) такой себе тхт-файл, "Some things every C programmer should know about C", решил поделится с общественностью. Вдруг кому полезно, или кто-то решит мыслями поделится.

Файл, собственно, вот: http://www.klausler.com/cnotes.txt (читать в браузере)
If you do what you have always done, you'll get what you have always got

βεερ_βooρ

Цитата: Nikolai від 04 Квітень 2008, 23:36:43
"Some things every C programmer should know about C"
Как сказал автор блога - действительно обязан ;D, а так вообще - [:|||:]. Будет интересно новичку, как шпаргалка-дополнение к К&Р.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Гм, что за K&P?

ИМХО там есть немало вещей, которые нужно знать, или по крайей мере применять, не раньше, как профессиональному программеру.
Да и другую часть вещей можно было бы объяснить намного более понятным языком (а не кратчайшим).
If you do what you have always done, you'll get what you have always got

Edd.Dragon

Цитата: Nikolai від 05 Квітень 2008, 00:16:59
Да и другую часть вещей можно было бы объяснить намного более понятным языком (а не кратчайшим).
На то она и памятка. Как сказал beep_boop - дополнение к Кернигану&Риччи.

βεερ_βooρ

Цитата: Nikolai від 05 Квітень 2008, 00:16:59
Гм, что за K&P?
Книга, которую должен прочитать каждый программист на С 8)
Цитата: Nikolai від 05 Квітень 2008, 00:16:59
ИМХО там есть немало вещей, которые нужно знать, или по крайей мере применять, не раньше, как профессиональному программеру.
ЦитатаEvery constant, object, function, and expression in C has a type.
Ну и как я это должен понимать с любительской точки зрения, а как с профессиональной?
Вообще смысл процитированной фразы не понял.
Цитата: Nikolai від 05 Квітень 2008, 00:16:59
Да и другую часть вещей можно было бы объяснить намного более понятным языком (а не кратчайшим).
Краткость - с. т.  ;D
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Цитата: beep_boop від 05 Квітень 2008, 00:59:29
Ну и как я это должен понимать с любительской точки зрения, а как с профессиональной?
Я же не сказал "все". Конкретно твой пример нужно учить буквально в первый день программирования.

К примеру:
ЦитатаMost generally, a type is either an unqualified type or such a type qualified with "const", "volatile", or both qualifiers.
Ну на кой мне это нужно на первых порах? Отродясь не писал volatile, да и const редко. Обычно они у меня unqualified, и все пашет без ворнингов.

Цитата: beep_boop від 05 Квітень 2008, 00:59:29
Краткость - с. т.  ;D
Как-то там было продолжение, "...и двоюродная сестра ограничености", что ли..


UPD:, аа, знаю я конечно эту книгу, ANSI C, она еще у меня была доп. учебником в начальном курсе программирования в универе. Полезная, только что-то она мне не очень понравилась, суховато. Мне больше понравилась книга Стэнли Липмана по С++.
If you do what you have always done, you'll get what you have always got

βεερ_βooρ

Цитата: Nikolai від 05 Квітень 2008, 01:06:26
UPD:, аа, знаю я конечно эту книгу, ANSI C, она еще у меня была доп. учебником в начальном курсе программирования в универе. Полезная, только что-то она мне не очень понравилась, суховато.
K&R -  ANSI C? :o, суховато >:(?
Нет, ты не знаешь эту книгу. Забирай зачетку, неуд. Погуглишь - придешь на пересдачу.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

Цитата: Nikolai від 05 Квітень 2008, 01:06:26
да и const редко.
Если ты редко используешь const, значит это профессиональный прием?  :D
Это значит только то, что ты заставляешь компилятор создавать переменные, которые никогда не меняются, вместо того, чтобы он подставил их значения (или ссылки на значения) прямо во время компиляции. Т.е. ты намеренно теряешь производительность.

И чтобы такого не делать, const нужно учить вместе с типами на первом же уроке.

βεερ_βooρ

Цитата: edd_k від 05 Квітень 2008, 02:01:31
И чтобы такого не делать, const нужно учить вместе с типами на первом же уроке.
... а так же когда и почему они лучше #define
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

Цитата: Nikolai від 05 Квітень 2008, 01:06:26
Мне больше понравилась книга Стэнли Липмана по С++.
C++ желательно учить по книге его безсменного создателя (тем более, что это одновременно и отличный справочник)  - тогда будет понятно, чего добивались при разработке тех или иных аспектов стандарта и как сам Страуструп видит программирование на C++. Ведь сначала было видение команды разработчиков стандарта, а потом оно воплотилось в реализации.

После прочтения других книг для новичка может быть проще понять азы. Зато у него возникнет масса вопросов по поводу "а назачем вообще придумали это и это?".


Цитата: beep_boop від 05 Квітень 2008, 02:07:16
... а так же когда и почему они лучше #define
От определения констант через #define я уже отучился, потому и не вспоминаю о них %)

βεερ_βooρ

Цитата: edd_k від 05 Квітень 2008, 02:10:08
После прочтения других книг для новичка может быть проще понять азы. Зато у него возникнет масса вопросов по поводу "а назачем вообще придумали это и это?".
Ну это есть не только у новичка - у некоторых профессоров тоже :D
Цитата: edd_k від 05 Квітень 2008, 02:10:08
От определения констант через #define я уже отучился, потому и не вспоминаю о них %)
Да, да - вредная привычка.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Цитата: beep_boop від 05 Квітень 2008, 01:23:57
K&R -  ANSI C? :o, суховато >:(?
Нет, ты не знаешь эту книгу. Забирай зачетку, неуд. Погуглишь - придешь на пересдачу.
Это что??! Первый же линк! Или я путаю имена? Неуд. по Гуглингу! На пересдачу. И нефиг тут непроверив. Кстати я всегда гуглю, прежде чем написать пост.

Цитата: edd_k від 05 Квітень 2008, 02:01:31
Если ты редко используешь const, значит это профессиональный прием?  :D
Нет, блин, если я изпользую const, то это непрофессиональный прием, потому, что const, как сказано, по крайней мере добавляет производительности! Но я по собственному желанию не изпользую const, потому что мне так a) банально привычнее, б) программки у меня маленькие, до 1000 лайнов, пишутся не для реального изпользования, и поэтому на ихнюю производительность мне глубоко начхать.
Кстати, что все за volatile молчат?

Цитата: beep_boop від 05 Квітень 2008, 02:07:16
... а так же когда и почему они лучше #define
Забыл напомнить еще и за goto в придачу.

Цитата: edd_k від 05 Квітень 2008, 02:10:08
После прочтения других книг для новичка может быть проще понять азы. Зато у него возникнет масса вопросов по поводу "а назачем вообще придумали это и это?".
Как раз новичок этих вопросов задавать не будет! Он будет радоватся, что его программа идет, и все. Представь себе, что ты студент-новичок по пилотированию, и у тебя второе занятие. Ты начнешь задавать вопросы типа "А нафига вот эта вот фиговина тут?, дай-ка вырублю!"? Ты будешь просто радоватся, что оно летит и не падает, и если еще по прямой, то вообще масло.
А философскими вопросами экзестенциального хар-ра об особенностях языка задаются обычно позднее, когда хотя бы ети особенности увидены, а потом понято, что они не кусаются. Другое дело, что читая упомянутую тобой книгу можно этих вопросов избежать.
If you do what you have always done, you'll get what you have always got

Edd.Dragon

ЦитатаКстати, что все за volatile молчат?
Потому что, const - это действительно базовая концепция. Представь себе, что в объявлении переменных тебе бы пришлось ставить модификатор var и все станет на свои места. Данные программы деляться на переменные и константы. Соответственно чтобы написать программу, сложнее "Hello world" тебе просто необходимо знать var и const, т.к. без них ты не сможешь объявлять данные. Оба модификатора равноценны. Просто var опущен и подразумевается по умолчанию, а const уже надо указывать.

А вот volatile - это уже более "высокая" материя, позволяющая выборочно отключать оптимизацию.

ЦитатаНет, блин, если я изпользую const, то это непрофессиональный прием, потому, что const, как сказано, по крайней мере добавляет производительности!
Все же наоборот. Использование const не добавляет производительности, а делает программу такой, какой она и должа была бы быть по всей логике. А вот замена констант на переменные - это необоснованное сокрытие логики программы и заодно ухудшение производительности.

Увидев const pi = 3.14 я понимаю, что это неизменяемое число, что далее в программе, встретив pi я в своих мыслях заменяю его на 3.14. А вот без const я в этом не уверен, т.к. автор кода расценивает переменную pi, как изменяемую. И кто сказал, что она нигде в коде не меняется? В общем, необоснованная путаница. Даже если программа состоит из 100 строк. А 1000 строк - это уже прямой повод писать более прозрачный и четкий код.

Понятно, что ты можешь обойтись без этих "мелочей" и твой код возможно никто читать не будет. Но ведь ты не единственный новичок. И добрая половина программирующих на C++ потенциально могту пойти дальше. А привычка - великая сила. И чтобы избавиться от плохой привычки необходимо потратить время, когда можно было изначально не обзаводиться этой бесполезной привычкой.

В общем "я пишу для себя, значит пофиг" - это враг хорошего ;)

Nikolai

Получается, что упомянутый выше unqualified type это переменная (которые мы explicitly не объявляем)?
If you do what you have always done, you'll get what you have always got

βεερ_βooρ

Цитата: Nikolai від 05 Квітень 2008, 05:08:28
Это что??! Первый же линк! Или я путаю имена?
Таки путаете названия.
Цитата: Nikolai від 05 Квітень 2008, 05:08:28
Неуд. по Гуглингу! На пересдачу. И нефиг тут непроверив.
Неуд по ИИ. Найдя данные их надо правильно обработать.
Название книги:
The C Programming Language
Слов ANSI C в названии нету и быть не может, т.к. первое издание вышло еще до появления стандарта ANSI C.

ЦитатаPolish: Jezyk ANSI C, Wydawnictwa Naukowo-Techniczne, ISBN 83-204-1693-0
Polish: Jezyk ANSI C, Wydawnictwa Naukowo-Techniczne, ISBN 83-204-2804-1 (new translation or new cover?)
Почему поляки вынесли слово ANSI C в название - их проблеммы.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Цитата: beep_boop від 06 Квітень 2008, 02:42:13
Неуд по ИИ.
Грубо. Тем более по ИИ у меня далеко не неуд.
Цитата: beep_boop від 06 Квітень 2008, 02:42:13
Название книги:
The C Programming Language
Во-1 я не говорил, что заглавие книги ANSI C. Я ее просто так назвал, обозвал, если хочешь. Если я тебе скажу The Dragon Book ты же меня не станешь упрекать, что я ее неправильно называю? Понятно же о чем речь.
Цитата: beep_boop від 06 Квітень 2008, 02:42:13
Слов ANSI C в названии нету и быть не может, т.к. первое издание вышло еще до появления стандарта ANSI C.
Так там на книге вверху и написано, Second Edition! Или мы признаем только исходный, первый оригинал?
Цитата: beep_boop від 06 Квітень 2008, 02:42:13
Почему поляки вынесли слово ANSI C в название - их проблеммы.
Хм, по приведенному мной линку легче посчитать на каких книгах НЕ стоит "печать" ANSI C.
If you do what you have always done, you'll get what you have always got

βεερ_βooρ

Цитата: Nikolai від 06 Квітень 2008, 17:28:59
Если я тебе скажу The Dragon Book ты же меня не станешь упрекать, что я ее неправильно называю? Понятно же о чем речь.
То, что ты так ее назвал не значит, что тебя все поймут. Dragon Book - устоявшееся прозвище. А K&R ANSI C обозвал только ты :P
Цитата: Nikolai від 06 Квітень 2008, 17:28:59
Хм, по приведенному мной линку легче посчитать на каких книгах НЕ стоит "печать" ANSI C.
Оформление обложки - дело такое. У меня просто книжечка красного цвета с надписью "Язык программирования С"
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Цитата: beep_boop від 06 Квітень 2008, 17:44:59
А K&R ANSI C обозвал только ты :P
Ибо никогда в жизни не держал в руках и не видел в глаза другого варианта.
Цитата: beep_boop від 06 Квітень 2008, 17:44:59
Оформление обложки - дело такое. У меня просто книжечка красного цвета с надписью "Язык программирования С"
Я так и знал, что ты наверняка читал ее на русском, а там другая обложка наверняка. Опять-таки. Все издания которые я видел (собственно английское и болгарское) исполнены в характерном белом цвете с синим шрифтом и красной печатью ANSI C. Почему русские сделали другую обложку с лаконичным названием - их проблемы (с) :P
Да и легче всего как-то опиратся и говорить об оригинале (желательно последнего издания), чем о конкретной локализации.
If you do what you have always done, you'll get what you have always got

βεερ_βooρ

Цитата: Nikolai від 06 Квітень 2008, 17:53:16
Ибо никогда в жизни не держал в руках и не видел в глаза другого варианта.
Ну так как говорится твои проблемы :-X
Цитата: Nikolai від 06 Квітень 2008, 17:53:16
Да и легче всего как-то опиратся и говорить об оригинале (желательно последнего издания), чем о конкретной локализации.

Книга была издана ДО появления стандарта ANSI C и все зовут ее с тех пор K&R. Обзывать ее ANSI C просто из-за печати на новой обложке никто не будет.

ЗЫ А вообще рекомендую посмотреть на название темы.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Цитата: beep_boop від 06 Квітень 2008, 18:39:24
Ну так как говорится твои проблемы :-X
Цитата: NikolaiПочему русские сделали другую обложку с лаконичным названием - их проблемы
Нет, это как бы не мои проблемы, что ты читал книгу с недефолтной обложкой.
Цитата: Nikolai від 06 Квітень 2008, 17:53:16
Да и легче всего как-то опиратся и говорить об оригинале (желательно последнего издания), чем о конкретной локализации.

Я видел второе издание, говорю о нем. То, что ты ее знаешь с первого издания, и являешься, если можно так это назвать, old-skool дело другое. И тем более я не могу знать как книгу звали до того, как вышло второе издание. Это раз. Я ее только обозвал ANSI C, это лишь маппинг между обложкой и книгой в моей голове. Называть бы я ее так не стал. Посмотри выше, где я это сказал, фраза была в полу-мыслительной форме. Это два.

Я  не пытаюсь сделать тебя виноватым, но просто не нужно меня винить в неправильном названии, когда а) сам читал другое издание, б) на другом языке, и в) я книгу обозвал, а не назвал.

Цитата: beep_boop від 06 Квітень 2008, 18:39:24
ЗЫ А вообще рекомендую посмотреть на название темы.
Слушна думка.
If you do what you have always done, you'll get what you have always got

Edd.Dragon

Уважаемые коллеги, прекратите обложками меряться!

Такое впечатление, что каждый программист на С должен знать как выглядят обложки всех изданий K&R.

Nikolai

Цитата: edd_k від 07 Квітень 2008, 10:49:51
Такое впечатление, что каждый программист на С должен знать как выглядят обложки всех изданий K&R.
Как оказалось - желательно ;D
If you do what you have always done, you'll get what you have always got