Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Возникли вопросы после прочтения главы 6.2 K&R. Подскажите пожалуйста Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 2. Я снова встретил это выражение, про внешние и статические структуры. Может быть это неправильный перевод ? K&RИ наконец, автоматические структуры, как и автоматические массивы, не могут быть инициализированы; инициализация возможна только в случае внешних или статических структур. Ещё появились какие-то автоматические структуры и массивы. 3. Код: plaintext 1. Адрес x и адрес первого члена x.day совпадают. Т.о. я пришёл к выводу что структура хранится как связанные друг с другом куски памяти различной длины (как массив элементы которого могут иметь разную размерность). Это верно ? 4. Далее приводится сахарный оператор, который на мой взгляд совершенно не нужен, запись (*ps).smth_el куда очевидней чем псевдокод ps->smth_el. Вообщем переписал функцию которая приведена в примере по-другому. А как вы относитесь к оператору "->" ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 05:04 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Алгоритм вычисления високосного года упрощённо намеренно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 05:22 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
SashaMercury2. Я снова встретил это выражение, про внешние и статические структуры. Может быть это неправильный перевод ?Когда сомневаешься в переводе - берешь оригинал и читаешь. А вообще, я тебе очень не рекомендую возится с не именованными структурами. По стандарту их делать можно, а на практике это никогда не нужно. В реальном проекте у тебя всегда будут десятки различных структур и вляпывать туда еще и не именованные - нафиг-нафиг. SashaMercuryАдрес x и адрес первого члена x.day совпадают. Т.о. я пришёл к выводу что структура хранится как связанные друг с другом куски памяти различной длины (как массив элементы которого могут иметь разную размерность). Это верно ?Да, верно. В этом и есть смысл структуры - набор разнотипных элементов. SashaMercury4. Далее приводится сахарный оператор, который на мой взгляд совершенно не нужен, запись (*ps).smth_el куда очевидней чем псевдокод ps->smth_el. Вообщем переписал функцию которая приведена в примере по-другому. А как вы относитесь к оператору "->" ? Ниче, привыкнешь :) А для начала посчитай: (*ps). - 4 символа. ps-> - два символа. Ты все еще хочешь заниматься ручным разименованием? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 07:43 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
White OwlА для начала посчитай: (*ps). - 4 символа. ps-> - два символа.(*ps). - 4 символа и 3 шифта, ps-> - 2 символа и один шифт ;-)) вообще говоря, современные IDE умеют по контексту понимать, чего надо ставить, точку или ->, поэтому проблема практическое значение потеряла, по факту )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:30 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА как вы относитесь к оператору "->" ? Как к фиче языка, которую пользуют в 99% там где не надо. Например чтобы использовать твою функцию set__day_of_year(struct date* pd) надо писать так Код: plaintext 1. 2. А если переделать ее на передачу параметра по ссылке Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. то использовать можно так Код: plaintext 1. 2. И это не только убирание нагромождения лишних * и & , но и возможность простого переноса кода копипастом, например так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. это часто бывает надо, когда сначала пропишешь что-то в одном месте, потом понимаешь что надо вынести в отдельную функцию. Мое личное мнение в книгах злоупотребляют использованием указателей, т.к. это круто потому что в других языках их нет. Реально именно указатель нужен в 1% случаев, для остальных 99% достаточно передачи параметра по ссылке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 11:47 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Dima TМое личное мнение в книгах злоупотребляют использованием указателей, т.к. это круто потому что в других языках их нет. Реально именно указатель нужен в 1% случаев, для остальных 99% достаточно передачи параметра по ссылке.в С нет ссылок, ау! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 11:57 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
egorychв С нет ссылок, ау! ну тогда скажи как правильно это называется Код: plaintext 1. В других языках называется "передача параметра по ссылке" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 12:00 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКак бы вывести нормально, например в цикле делать printf Вынеси в отдельную функцию Код: plaintext 1. 2. 3. 4. 5. А в коде Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 12:39 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Dima Tegorychв С нет ссылок, ау! ну тогда скажи как правильно это называется Код: plaintext 1. В других языках называется "передача параметра по ссылке"а в С это называется "ошибка компиляции". С и С++ - разные языки, есичё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 14:28 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
В целом я понял :) Dima_T, хороший пример, теперь более понятно зачем появилась передача значений по ссылке дополнительно к указателям. White Owl, я за то чтобы бы все логарифмы были натуральными. Потому, этот сахар мне не нравится, напоминает препроцессорную опцию, точнее макроподстановку #define x->y (*x).y , и есть предположение что аналогично происходит. Но ваши мысли мне понравились, спасибо :-) Всем спасибо ) У вас интересный спор, хорошо что в нем открывается истина ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 16:57 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
SashaMercuryнапоминает препроцессорную опцию, точнее макроподстановку #define x->y (*x).y , и есть предположение что аналогично происходит.в С++ оператор -> можно перегрузить, а оператор "точка" - нет. Для С замечание неактуальное, естественно P.S. Чтобы окончательно закрыть вопрос, можно посмотреть, конечно, чё оно в ассемблере нагенерит для x->y и для (*x).y, но мне лень, например. Уверен, что код одинаковый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 18:11 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
egorych С и С++ - разные языки, есичё Ну так объясни это производителям компиляторов. Чтоб работало либо printf() либо cout. Лично я этой границы не знаю и знать не хочу. Но писатели книжек ее жестко придерживаются, в итоге в литературе либо сплошные *, & и ->, либо взрывы мозга с шаблонами и перегрузками. В общем крайности без намека на золотую середину. Сам учился по таким книжкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 19:49 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Dima TЛично я этой границы не знаю и знать не хочу. зачем тогда икру мечешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 23:13 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Dima Tegorych С и С++ - разные языки, есичёНу так объясни это производителям компиляторов.они в курсе, не поверишь ты можешь компилировать либо в С, либо в С++, все компиляторы это поддерживают, из известных. Некоторым достаточно подсунуть исходник с расширением .c, чтобы начать в С компилировать. K&R - это С: Брайан Керниган, Деннис Ритчи. Язык программирования С , а топикстартер спрашивает про неё, вряд ли имеет смысл давать ему советы про другой язык, не находишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 23:18 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
egorych вряд ли имеет смысл давать ему советы про другой язык топикстартер считает что стоит. Хорошо постепенно принимать различия между множествами С и С++. Еще и про перегрузку узнал, отлично. А про printf почитаю в черновике стандарта С++, я думал что С++ полностью включает в себя С. Хотя не уверен что фраза printf \in C будет истинна. Изопропил, egorych, не ругайтесь пожалуйста. Мне например нравится чистая дискуссия. Вот если я футбол например играю, тогда могу резкое что-нибудь сказать, или кто-нибудь жутко тормозит, тогда тоже могу не сдержаться. Дмитрий просто недосказал что-то, или по-своему захотел ответить на поставленный вопрос, у каждого ведь своя точка зрения, и это не значит что он не знает, для меня очевидно что знает, он ответил, а вы прокомментировали, и за счёт этого мы обменялись своими мнениями (у меня так вообще самый большой плюс, я узнал из вашего спора что-то новое, понимаю что-то рассматривает с/с++ вместе,а кто-то раздельно, и та и другая точка зрения имеет право на жизнь, вероятно, но для меня на данный момент есть два множества, между которыми я пока не могу поставить знак "вложено" ). Но мы ведь все (и egorych, и Изопропил, и Дмитрий, и я)занимаемся программированием, науке очень близкой к математике. Разве только это уже не здорово ;) Спасибо за знания C: ps Dima_Tлибо взрывы мозга с шаблонами и перегрузками здорово звучит, уже хочу их ^_^ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 04:09 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
у меня на одной пятой экрана ноутбука чёрные пятна, потому ошибаюсь иногда ( кто-то рассматривает с/с++ вместе,а кто-то раздельно * ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 04:12 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TЛично я этой границы не знаю и знать не хочу. зачем тогда икру мечешь? Накипело, сам в студенчестве восхищался брутальностью указателей, до тех пор пока вместо тестовых задачек не попытался написать что-то посерьезнее. Хочу понять реально в чем разница С и С++. Всегда считал что С++ содержит в себе С. И единственное ограничение с которым сталкивался: egorychподсунуть исходник с расширением .c Так чего нет С++ что есть в С ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 06:27 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Dima TТак чего нет С++ что есть в С ? В основном мелочи разные. Самое серьезное: - неявное приведение из void* к конкретному типу указателя - поименная инициализация полей структур. - локальные массивы переменной длины Первые 2 очень часто применяют в С, поэтому в большинстве реальных проектов С код не компилируется С++ компиляторами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 07:07 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky- поименная инициализация полей структур.вот это очень хочется иметь в С++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 09:43 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. SashaMercury, общее решение этой задачи лежит в плоскости других языков или парадигм или подходов. Например в Lisp ты можешь обойти любую структуру (список списков) и вывести все элементы. В С++ усилиение макропроцессора - это "путь в никуда". Это не способствует развитию "собственно языка" и runtime а просто усложняет понимание кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 09:53 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Dima TИзопропилпропущено... зачем тогда икру мечешь? Накипело, сам в студенчестве восхищался брутальностью указателей, до тех пор пока вместо тестовых задачек не попытался написать что-то посерьезнее. Хочу понять реально в чем разница С и С++. Всегда считал что С++ содержит в себе С. И единственное ограничение с которым сталкивался: egorychподсунуть исходник с расширением .c Так чего нет С++ что есть в С ? Дело не в различиях лексическо-грамматической основы языков. Дело в подходах, в стиле, методиках. На С++ можно программировать в стиле С. Надо признать что на этом форуме много людей практикующих такой подход, своеобразный расширенный С можно сказать, используют - отчего же нет если задачи решаются. Но все же если смотреть в mainstream (скажем самые популярные библиотеки, открытые проекты) - программирование на С и на С++ кардинально различаются. Приверженцы С ярые противники С++, приверженцы С++ ярые противники С. Потусуйтесь на freenode (IRC) (можно пообщаться с разработчиками boost, gcc, curl, linux, nginx - это из того с чем я знаком). С очень прост в отношении функционала который он дает разработчику. Но каждый из этих малочисленных инструментов очень мощный и очень опасный, программисту дается бОльшая свобода, ценой большей ответственности. Любой серьезный проект на С неизменно содержит свою собственную "стандартную библиотеку" заточенную под него, например nginx: реализованы практически все основные структуры данных, алгоритмы, при этом они заточены на использование пулов и работу с небольшими данными - HTTP-запросы, то же самое можно сказать про curl, linux, postgres, libxml. В этом смысле переиспользование кода в С значимо меньше, что не есть плохо, эти проекты - высокоэффективные самодостаточные системы со своей внутренней жизнью. В С++ акцент сильно смещен в сторону проектирования не только общей архитектуры, но и отдельных компонент. Если в С на уровне простых компонент вы видите одни и те же вещи (callbacks, contexts, pools) реализованные примерно одинаково (с заточкой под конкретные нужды), то здесь гораздо больше простора для творчества, что однако часто приводит к сложности с нахождением простого и красивого решения. Представьте вы попали в рай технарей, есть гигантский выбор инструментов, материалов, всякого рода станков, учебников - глаза разбегаются, хватаете сначала один инструмент, потом другой, третий, лепите, рисуете, сверлите, протягиваете на экструзионном станке, и еще вон на той странной штуке. В итоге получается малопонятная мазня - сборище склеенных фич. С++ также предоставляет больше возможностей для структурирования систем, чем С. Это важно для крупных прикладных приложений. Эти возможности не такие мощные как в языках ориентированных на так называемый "enterprise" сектор, но их вполне достаточно (хотя может и нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 11:05 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Dima TТак чего нет С++ что есть в С ? При изучении C (а иначе зачем брать K&R?) важно чего нет в C, а не наоборот. Dima TМое личное мнение в книгах злоупотребляют использованием указателей, т.к. это круто потому что в других языках их нет Ага, вообще нигде нет . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 11:25 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за ответы. Я выводы для себя сделал. Какие - не скажу, а то развернется религиозная дискуссия страниц на 10, пока модераторы не прикроют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 11:38 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
Dima TВсем спасибо за ответы. Я выводы для себя сделал. Какие - не скажу, а то развернется религиозная дискуссия страниц на 10, пока модераторы не прикроют.ну и жаль )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 11:51 |
|
||
|
K&R 6.2 Структуры и функции
|
|||
|---|---|---|---|
|
#18+
k0rvin, очевидно что имелось ввиду не буквально " только в Си есть указатели", а тот факт что указатели являются лицом языка. Не придирайтесь. mayton, что такое макропроцессор я понимаю.Под усилением вы понимаете создание искусственной функции, делающей печать каждого элемента структуры ? Мне это не очень понравилось, ибо fe в структуре будет 10 членов, придётся писать новую функцию. Или вы другое имеете ввиду ? sherzod_ , Будет ли решаться на С весь класс задач решаемых на С++ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2014, 13:35 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38603306&tid=2019569]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 297ms |
| total: | 486ms |

| 0 / 0 |
