Здравствуйте, Joker3D, Вы писали:
JD>Здравствуйте!
JD>Прошу вас высказать свои соображения по вопросу: JD>"нужен ли префикс p перед переменными-указателями" JD>(MS VC++ 7.0)
JD>понятно, что все пишут по-разному и тут нет и не может быть "правил", я просто прошу высказать
JD>железные аргументы ЗА префикс 'p': JD>.... ???
JD>
JD>и железные аргументы ПРОТИВ префикса 'p': JD>.... ???
JD>
Любые соглашения о синтаксисе (будь то префиксы или суффиксы, p перед указателями, или u перед указателями — неважно), должны быть!!! какие они не важно — но должны проходить через весь код!!!
это облегчает чтение кода, сам когда будешь разбираться (в своем или чужом коде) поймешь...
для локальных переменных функций и процедур — не так важно, как для членов классов и структур, на мой взгляд
S>Любые соглашения о синтаксисе (будь то префиксы или суффиксы, p перед указателями, или u перед указателями — неважно), должны быть!!! какие они не важно — но должны проходить через весь код!!!
S>это облегчает чтение кода, сам когда будешь разбираться (в своем или чужом коде) поймешь... S>для локальных переменных функций и процедур — не так важно, как для членов классов и структур, на мой взгляд
с этим-то я как раз полностью согласен!
только ведь эти соглашения должны же быть чем-то аргументированы — вот меня и интересуют конкретные аргументы...
Konstantin Trunin http://blog.trunin.com — эффективное управление людьми, проектами, собой
Здравствуйте, Joker3D, Вы писали:
JD>железные аргументы ЗА префикс 'p':
Я использую нотацию, в которой различаются указателеподобные сущности:
// произвольные
XYZ abc; // локальный объект
XYZ* pAbc; // просто указатель
CComPtr<IXyz> ptrAbc; // умный указатель
XYZ arrAbc[n]; // массив
// строкиchar cAbc; // одиночный символchar* sAbc; // указатель на строку
string strAbc; // объект-строка, или умный указатель на строкуchar szAbc[n]; // символьный буфер (не очень-то соответствует конвенции, но главное - отличается)
// часто используемые типы
IXmlNode* xmlAbc;
// итераторы
list<XYZ>::iterator itAbc;
Аргумент такой: нужно различать (хотя бы потому, что используются разные операторы доступа: "." и "->"); особенно это касается умных указателей, у которых есть оба оператора.
JD>и железные аргументы ПРОТИВ префикса 'p':
В тех случаях, когда объект — стопудово указатель по своей природе, то лишняя буква будет вносить сумятицу.
Например, строка. Будучи массивом символов, доступ к ней имеет "природу указателя".
Поэтому писать "pszAbc" — это можно трактовать как "char*", либо как "LPSTR*" (например, out-параметр).
В программе рядом могут сосуществовать разные указатели на одни и те же данные:
Здравствуйте, Joker3D, Вы писали:
JD>Здравствуйте, shrek, Вы писали:
JD> S>>Любые соглашения о синтаксисе (будь то префиксы или суффиксы, p перед указателями, или u перед указателями — неважно), должны быть!!! какие они не важно — но должны проходить через весь код!!!
S>>это облегчает чтение кода, сам когда будешь разбираться (в своем или чужом коде) поймешь... S>>для локальных переменных функций и процедур — не так важно, как для членов классов и структур, на мой взгляд
JD>с этим-то я как раз полностью согласен!
JD>только ведь эти соглашения должны же быть чем-то аргументированы — вот меня и интересуют конкретные аргументы...
Это же элементарно — префикс p используется везде — в Win32 API,MFC,ATL,WTL.
Поэтому проще следовать уже установленному соглашению, вместо того, чтобы изобретать что-то ещё.
Кроме того, не забывай, что p — это всего одна из частей системы именования. А cch ? А dw ? и т.д.
Убери p — придётся менять всё.
Re: префикс 'p' перед указателями...
От:
Аноним
Дата:
26.11.02 15:40
Оценка:
Здравствуйте, Joker3D, Вы писали:
JD>Здравствуйте!
JD>Прошу вас высказать свои соображения по вопросу: JD>"нужен ли префикс p перед переменными-указателями" JD>(MS VC++ 7.0)
JD>понятно, что все пишут по-разному и тут нет и не может быть "правил", я просто прошу высказать
JD>железные аргументы ЗА префикс 'p': JD>.... ???
JD>
JD>и железные аргументы ПРОТИВ префикса 'p': JD>.... ???
JD>
JD>спасибо!..
"‘Comrades,’ he said, ‘here is a point that must be settled. The wild creatures, such as rats and rabbits-are they our friends or our enemies? Let us put it to the vote. I propose this question to the meeting: Are rats comrades?’
The vote was taken at once, and it was agreed by an overwhelming majority that rats were comrades. There were only four dissentients, the three dogs and the cat, who was afterwards discovered to have voted on both sides."
(C)G. Orwell "Animal Farm: a Fairy Story"
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Joker3D, Вы писали:
JD>>Здравствуйте, shrek, Вы писали:
JD>> S>>>Любые соглашения о синтаксисе (будь то префиксы или суффиксы, p перед указателями, или u перед указателями — неважно), должны быть!!! какие они не важно — но должны проходить через весь код!!!
S>>>это облегчает чтение кода, сам когда будешь разбираться (в своем или чужом коде) поймешь... S>>>для локальных переменных функций и процедур — не так важно, как для членов классов и структур, на мой взгляд
JD>>с этим-то я как раз полностью согласен!
JD>>только ведь эти соглашения должны же быть чем-то аргументированы — вот меня и интересуют конкретные аргументы... А>Это же элементарно — префикс p используется везде — в Win32 API,MFC,ATL,WTL.
...а если я скажу что это все суксь? и я на это не обязан ориентироваться?...
А>Поэтому проще следовать уже установленному соглашению, вместо того, чтобы изобретать что-то ещё. А>Кроме того, не забывай, что p — это всего одна из частей системы именования. А cch ? А dw ? и т.д. А>Убери p — придётся менять всё.
уже! уже ВСЁ решили поменять (вернее пишем новое — вот и решили сделать правила).. просто против остального я не сильно возражаю — от c, b, n, u, dw... я уже и сам постепенно отказываюсь... меня конкретно задело именно устранение 'p' и ЛокальныеПеременныеСБольшойБуквы
Konstantin Trunin http://blog.trunin.com — эффективное управление людьми, проектами, собой
Здравствуйте, Кодт, Вы писали:
К>Аргумент такой: нужно различать (хотя бы потому, что используются разные операторы доступа: "." и "->"); особенно это касается умных указателей, у которых есть оба оператора.
...но ведь можно же просто навести мышкой и увидеть во всплывающей подсказке тип переменной! ??? ... :
Konstantin Trunin http://blog.trunin.com — эффективное управление людьми, проектами, собой
Здравствуйте, vasketsov, Вы писали:
V>Здравствуйте, Joker3D, Вы писали:
JD>>...но ведь можно же просто навести мышкой и увидеть во всплывающей подсказке тип переменной! ??? ... :
V>В notepad? В vi? В MSVS?
MSVS 7.0
Konstantin Trunin http://blog.trunin.com — эффективное управление людьми, проектами, собой
Здравствуйте, Joker3D, Вы писали:
JD>Здравствуйте, Кодт, Вы писали:
К>>Аргумент такой: нужно различать (хотя бы потому, что используются разные операторы доступа: "." и "->"); особенно это касается умных указателей, у которых есть оба оператора.
JD>...но ведь можно же просто навести мышкой и увидеть во всплывающей подсказке тип переменной! ??? ... :
Чтобы навести мышкой нужно оторвать руки от клавиатуры, потерять кучу времени, что сильно раздражает. А так сразу понятно, что это за хрень.
Здравствуйте, Аноним, Вы писали:
А>Это же элементарно — префикс p используется везде — в Win32 API,MFC,ATL,WTL. А>Поэтому проще следовать уже установленному соглашению, вместо того, чтобы изобретать что-то ещё.
Заползая на уровень ниже user mode, с удивлением обнаруживаем отсутствие префикса "p" направо и налево
Здравствуйте, shrek, Вы писали:
S>Любые соглашения о синтаксисе (будь то префиксы или суффиксы, p перед указателями, или u перед указателями — неважно), должны быть!!! какие они не важно — но должны проходить через весь код!!!
S>это облегчает чтение кода, сам когда будешь разбираться (в своем или чужом коде) поймешь... S>для локальных переменных функций и процедур — не так важно, как для членов классов и структур, на мой взгляд
В С/С++ все префиксы — от лени придумывать нормальные имена переменных. Вот выдержка из книги Алена Голуба "ВЕРЕВКА ДОСТАТОЧНОЙ ДЛИНЫ, ЧТОБЫ ВЫСТРЕЛИТЬ СЕБЕ В НОГУ". Книгу можно легко найти по вышеуказанным ключевым словам.
Существует и более распространенный, хотя и менее радикальный прием, при котором имена указателей начинают символом p. Эта практика тоже загромождает программу. Вы ведь не начинаете имена целочисленных переменных типа int символом i, переменных типа double — d, а функций — f? Очевидным исключением является случай, когда у вас есть объект и указатель на этот объект в одной и той же области видимости:
char str[128], *pstr = str;
c другой стороны, для указателя, вероятно, лучше содержательное имя. Сравните:
char str[128], *first_nonwhite = str;
while ( isspace(*first_nonwhite) )
++first_nonwhite;
// В этой ситуации имя *first_nonwhite говорит вам гораздо
// больше о том, что делает переменная, чем предыдущее
Такие дела
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Дело не в префиксе.Нужно писать так, что бы все понимали твой код.Те надо уметь писать сложные и не очень вещи очень просто, но не глупо, не линейно.
вот мои правила:
1. В проекте более чем на одного человека нужно соблюдать общий стиль — имена префиксы, отступы
и тд. Здесь я стараюсь улавливать все тонкости.
2. В самых сложных,глупых или некрасивых случаях ставить комментарии. Нет смысла усеивать код абзацами текста. Очень сложно читать код вперемежку с кодом. Зачем это надо ? Человек, который глянет на конструкцию, в которой более десятка операций, скорее всего испытает шок.
Это правило я постоянно нарушаю.
3. Функция должна занимать максимум 1 страницу. Так проще понять алгоритм. Перелистывая, сложно запомнитить все. Кто сомневается, тот скорее всего не работал с огромными проектами.
Нет таких людей, которые помнят все. Это иллюзия.
Иногда это правило приходится нарушать. Всяко бывает.
4. Конструкция должна иметь максимальный уровень вложенности не более 3х. Лучше будет несколько функций, которые вызываются из одного места, чем одна функция длинной сотни строк. В такой функции приходится при смене погоды править мелкие баги.
Это я соблюдаю в 90% случаев.
В С/С++ есть указатели принципиально отличаются от других "обычных" типов данных. Как часто вы работая с указателем, интересуетесь именно значением указателя (т.е. адресом), а не данными, на которые ссылается указатель? Я думаю многие ответят, что давольно редко, и то лишь при реализации механизма итерации или схожего с ним. На этапе проектирования системы, вообще нету понятия указателя. Как передовать объект — по значению/ссылке или по указателю — это часть реализации системы. Именно на этом факте основано мое убеждение в необходимости различать указатели по именам. Хотя бы для того, чтобы понять, нужно ли работать на прямую с значением переменной или его нужно предварительно разоменовать. Как различать — либо при помощи префикса, либо при помощи суффикса. Мне больше нравится префикс p.
/Влад
... << RSDN@Home 1.0 alpha 14 >>
WBR,
Влад Волосюк
Re: Оформление кода: префикс 'p' перед указателями...
JD>Здравствуйте!
JD>Прошу вас высказать свои соображения по вопросу: JD>"нужен ли префикс p перед переменными-указателями" JD>(MS VC++ 7.0)
JD>понятно, что все пишут по-разному и тут нет и не может быть "правил", я просто прошу высказать
JD>железные аргументы ЗА префикс 'p': JD>.... ???
Знаешь, что это указатель
JD>и железные аргументы ПРОТИВ префикса 'p': JD>.... ???
Некоторым трудно/медленно/лень писать лишние буквы (помните int a, int b, int c1?)
JD>спасибо!..
... << RSDN@Home 1.0 beta 3 >>
icq: 118852038
Re[2]: Оформление кода: префикс 'p' перед указателями...