The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Дэниэл Бернштейн выступил с инициативой создания Си-компилят..., opennews (??), 22-Дек-15, (0) [смотреть все] +1

Сообщения [Сортировка по времени | RSS]


157. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  –1 +/
Сообщение от Аноним (-), 23-Дек-15, 17:59 
Их у меня есть - сколько не пытался - приходится погружаться в какие-то дебри и мыслить как компилятор. Хотелось бы больше ясности и простоты. Уж слишком много тут неоднозначностей.

5% - допустим ОК. Но это очень малая цифра. С трудом верится.

Читал вот этот:
http://boredzo.org/pointers/

Сначала понравилось, потом, дойдя до массивов, понял что представления ошибочны. Прямо как в классике: знаю только то, что ничего не знаю (про указатели)

Но хотелось бы без усилий читать код и понимать правильность указателей...

Когда-то читал советский учебник про среду си и манипулятор "колобок" - надо отдать должное там про указатели довольно хорошо растолковано. Где то встречал общий синтаксис и семантику указателей. Довольно удачно все разложено. Конечно сейчас сложно разыскать. Если только в библиотеку зайти или в "старую книгу" ...

Ответить | Правка | Наверх | Cообщить модератору

159. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (-), 23-Дек-15, 18:19 
> Их у меня есть - сколько не пытался - приходится погружаться в
> какие-то дебри и мыслить как компилятор. Хотелось бы больше ясности и
> простоты. Уж слишком много тут неоднозначностей.

Чтобы грамотно и эффективно пользоваться языком, вам придется в какой-то мере "мыслить как компилятор". Никаких неоднозначностей при этом не возникает, как раз наоборот.

> Читал вот этот:
> http://boredzo.org/pointers/
> Сначала понравилось, потом, дойдя до массивов, понял что представления ошибочны. Прямо
> как в классике: знаю только то, что ничего не знаю (про
> указатели)

Что именно вам не понятно? Всё по ссылке не читал, но на первый взгляд написано там очень по-простому, даже слишком. Из-за излишних упрощений многие тонкости могут теряться.

> Но хотелось бы без усилий читать код и понимать правильность указателей...

Без усилий осваивается разве что Basic. И то...

Если C упорно не дается, смотрите в сторону чего по-проще. В Java, например, нет указателей.

Ответить | Правка | Наверх | Cообщить модератору

160. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  –2 +/
Сообщение от Аноним (-), 23-Дек-15, 19:40 
меня интересуют именно указатели
Ответить | Правка | Наверх | Cообщить модератору

162. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от тоже Анонимemail (ok), 23-Дек-15, 23:01 
Тогда вот вам хорошая старая книга: http://lib.ru/CTOTOR/IBMPC/abel.txt_with-big-pictures.html
Первые три главы избавят вас от иллюзий о каком-то волшебстве в памяти и процессоре, и вы поймете, что такое указатели. Как с ними жить - вот тут понадобится практика, книги не помогают.
Ответить | Правка | Наверх | Cообщить модератору

163. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  –1 +/
Сообщение от privation (?), 23-Дек-15, 23:22 
шутку оценил сенкс ... еще bredly.pak забыли и нортонгайды, спасибо конечно

Когда то почитывал желтую большую книжку tasm 2.0

Мне бы хотелось "играть с листа"  - читать сходу указатели и понимать на что они ссылаются в данном учатке кода.

Ответить | Правка | Наверх | Cообщить модератору

164. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от тоже Анонимemail (ok), 24-Дек-15, 00:12 
Никаких шуток. Чтобы понять указатели, нужно понять адресную арифметику и RTTI, а главное - вот эту самую ужасную правду: что кроме адресной арифметики и RTTI, в указателях ничего нет, и ты должен думать об их проблемах сам.
Ответить | Правка | Наверх | Cообщить модератору

165. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Аноним (-), 24-Дек-15, 00:55 
OK - спасибо, мне знакома эта книженция. В общем понятно - копать в сторону ассемблера и книг.

С этим нет вопросов.

Вопросы остаются в понимании еще и синтаксиса указателей Си, особенно комплексных случаев.

Ответить | Правка | Наверх | Cообщить модератору

167. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +/
Сообщение от Andrey Mitrofanov (?), 24-Дек-15, 10:02 
> Их у меня есть - сколько не пытался - приходится погружаться в
> какие-то дебри и мыслить как компилятор. Хотелось бы больше ясности и
> простоты.

Си - низкоуровневый язык. Некоторые называют это "системный". Почти ассемблер. И ты мыслишь "как компилятор" потому, что пишешь почти на ассемблере. Надо как-то бороться со сложностью -- api, инкапсуляция, дисциплина кодирования [да, =работы компилятором].

> Сначала понравилось, потом, дойдя до массивов, понял что представления ошибочны. Прямо
> как в классике: знаю только то, что ничего не знаю (про указатели)
> Но хотелось бы без усилий читать код и понимать правильность указателей...

И абстракции ("больше ясности", "без усилий читать") далеки от выразительной части (указатнли, да). Более того, у каждого свои само-ограничения (если вообще), и именно чтобы читать чужой код, нужно сначала просечь абстракции и [само]ограничения кодирования автора(-ов). В некоторых проектах пишут кодинг стайл гайды, апи документацию, требования к добавляемому коду. Даже комментарии в коде пишут! Понятно, что и не везде, и слишком мало, и слишком поздно. Какие-то проекты "ломятся" от унаследованного кода, который или прочитать, или изменить, не поломав пользователям всё-всё-всё, уже никто не может. И пр., и т.п., и дл.

Возьми питон. Или бейсик. Или джавву. Или <вставить по вкусу>.

Это проще.

Сам - на баше, авке, седе и ко.  Не программист, админ.  Кернигана "в детстве" читал, однострочники на Си патчую, но не "пишу". Таков мой "ценный" опыт "понимания указателей".

Ответить | Правка | К родителю #157 | Наверх | Cообщить модератору

168. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  –2 +/
Сообщение от Аноним (-), 24-Дек-15, 13:21 
С абстракциями, ООП, SOLID, DRY проблем как раз нет, просто есть сложности с освоением синтаксиса указателей.

Например конструкции вида:

int* ptr;
и
int *ptr;

Меня быстро ставят в тупик. Я понимаю что первые 5 лет тяжело потом привыкаешь, но все-же есть доходчивые материалы для занятых по синтаксису указателей.

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

Опыт написание расширений есть - когда-то очень давно писал сишные модули для clipper.

Ответить | Правка | Наверх | Cообщить модератору

170. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  +1 +/
Сообщение от Аноним (-), 24-Дек-15, 15:03 
Если речь об обычных указателях, то с синтаксисом там как раз всё просто.

> int* ptr;
> int *ptr;
> int * ptr;

Все три строки значат ровно одно и то же - указатель на int. Но надо знать, что в объявлении переменной "указатель" относится к конкретной переменной, а не типу. Т.е. здесь:

> int *ptr, n;

ptr - это указатель на int, а n - это int. Поэтому многие предпочитают писать * рядом с именем переменной, несмотря на то, что это все еще часть типа. Этот, на мой взгляд, нелогичный момент надо просто запомнить и стараться объявлять переменные на разных строках.

> int* ptr;
> int n;

Так вопросов не возникает. Другой вариант - это использовать typedef.

> typedef int* int_ptr;
> int_ptr ptr1, ptr2;

Поскольку int_ptr - это псевдоним для типа int*, обе переменные ptr1 и ptr2 - это указатели на int.

Также надо понимать, как правильно квалифицировать типы в указателях. Ведь тип указателя на самом деле содержит квалификаторы типа, на который указатель указывает (например, можно ли менять значение по указателю), так и квалификаторы указателя (можно ли менять сам указатель). Например:

> const int* ptr1; // указатель на const int, т.е. значение по указателю менять нельзя
> int const* ptr2; // то же самое
> int* const ptr3; // указатель на int, значение по указателю менять можно, но сам указателю менять нельзя
> const int* const ptr4; // ничего менять нельзя

Т.е. всё, что находится до *, относится к типу объекта, на который указывает указатель. Всё, что после - к самому указателю. Это правило действует и при более высоких уровнях индирекции.

> int** pptr1; // указатель, который указывает на указатель на int
> const int** pptr2; // указатель, который указывает на указатель на const int
> const int* const* pptr2; // указатель, который указывает на константный указатель на const int
> const int* const* const pptr2; // константный указатель, который указывает на константный указатель на const int

Ответить | Правка | Наверх | Cообщить модератору

171. "Дэниэл Бернштейн выступил с инициативой создания Си-компилят..."  –1 +/
Сообщение от Аноним (-), 24-Дек-15, 15:40 
>[оверквотинг удален]
>> int const* ptr2; // то же самое
>> int* const ptr3; // указатель на int, значение по указателю менять можно, но сам указателю менять нельзя
>> const int* const ptr4; // ничего менять нельзя
> Т.е. всё, что находится до *, относится к типу объекта, на который
> указывает указатель. Всё, что после - к самому указателю. Это правило
> действует и при более высоких уровнях индирекции.
>> int** pptr1; // указатель, который указывает на указатель на int
>> const int** pptr2; // указатель, который указывает на указатель на const int
>> const int* const* pptr2; // указатель, который указывает на константный указатель на const int
>> const int* const* const pptr2; // константный указатель, который указывает на константный указатель на const int

премного благодарен за растолкованные нюансы и ваше время, особенно в случае const - теперь все более проще и понятнее

Действительно, int* защита фактически от случайной ошибки - довольно удобно. Насчет const - фактически это указание компилятору, что данный указатель не должен меняться. Несколько озадачивает в силу динамического выделения памяти.

Осталось разобраться в указателях на функции, структуры и массивах, "раз-адресации"


Мне понравились выкладки в этом комментарии:
http://stackoverflow.com/a/8615494/1633548

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру