Оформление кода: префикс 'p' перед указателями...
От: Joker3D Россия http://blog.trunin.com
Дата: 26.11.02 14:34
Оценка:
Перенесено в форум "Философия программирования" -- ПК.

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

Прошу вас высказать свои соображения по вопросу:
"нужен ли префикс p перед переменными-указателями"
(MS VC++ 7.0)

понятно, что все пишут по-разному и тут нет и не может быть "правил", я просто прошу высказать

железные аргументы ЗА префикс 'p':
.... ???



и железные аргументы ПРОТИВ префикса 'p':
.... ???



спасибо!..
Konstantin Trunin
http://blog.trunin.com — эффективное управление людьми, проектами, собой
Re: префикс 'p' перед указателями...
От: shrek  
Дата: 26.11.02 14:40
Оценка:
Здравствуйте, Joker3D, Вы писали:

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


JD>Прошу вас высказать свои соображения по вопросу:

JD>"нужен ли префикс p перед переменными-указателями"
JD>(MS VC++ 7.0)

JD>понятно, что все пишут по-разному и тут нет и не может быть "правил", я просто прошу высказать


JD>железные аргументы ЗА префикс 'p':

JD>.... ???

JD>


JD>и железные аргументы ПРОТИВ префикса 'p':

JD>.... ???

JD>


Любые соглашения о синтаксисе (будь то префиксы или суффиксы, p перед указателями, или u перед указателями — неважно), должны быть!!! какие они не важно — но должны проходить через весь код!!!

это облегчает чтение кода, сам когда будешь разбираться (в своем или чужом коде) поймешь...
для локальных переменных функций и процедур — не так важно, как для членов классов и структур, на мой взгляд
Re[2]: префикс 'p' перед указателями...
От: Joker3D Россия http://blog.trunin.com
Дата: 26.11.02 14:43
Оценка:
Здравствуйте, shrek, Вы писали:


S>Любые соглашения о синтаксисе (будь то префиксы или суффиксы, p перед указателями, или u перед указателями — неважно), должны быть!!! какие они не важно — но должны проходить через весь код!!!


S>это облегчает чтение кода, сам когда будешь разбираться (в своем или чужом коде) поймешь...

S>для локальных переменных функций и процедур — не так важно, как для членов классов и структур, на мой взгляд

с этим-то я как раз полностью согласен!

только ведь эти соглашения должны же быть чем-то аргументированы — вот меня и интересуют конкретные аргументы...
Konstantin Trunin
http://blog.trunin.com — эффективное управление людьми, проектами, собой
Re: префикс 'p' перед указателями...
От: Кодт Россия  
Дата: 26.11.02 15:20
Оценка: 1 (1)
Здравствуйте, 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-параметр).

В программе рядом могут сосуществовать разные указатели на одни и те же данные:
void foo(const char* sParam)
{
  string strParam = sParam; // удобно пользоваться оберткой
  int l = strParam.length();
  ...
}

void bar()
{
  string strDataToParse;
  cin >> strDataToParse;

  const char* sDataToParse = strDataToParse.c_str();
  while(!*sDataToParse)
  {
    char c = *(sDataToParse++);
    ...
  }
}
Перекуём баги на фичи!
Re[3]: префикс 'p' перед указателями...
От: Аноним  
Дата: 26.11.02 15:22
Оценка:
Здравствуйте, 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"
Re[4]: префикс 'p' перед указателями...
От: Joker3D Россия http://blog.trunin.com
Дата: 26.11.02 15:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, 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 — эффективное управление людьми, проектами, собой
Re[2]: префикс 'p' перед указателями...
От: Joker3D Россия http://blog.trunin.com
Дата: 26.11.02 15:44
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Аргумент такой: нужно различать (хотя бы потому, что используются разные операторы доступа: "." и "->"); особенно это касается умных указателей, у которых есть оба оператора.


...но ведь можно же просто навести мышкой и увидеть во всплывающей подсказке тип переменной! ??? ... :
Konstantin Trunin
http://blog.trunin.com — эффективное управление людьми, проектами, собой
Re: префикс 'p' перед указателями...
От: Vi2 Удмуртия http://www.adem.ru
Дата: 26.11.02 16:16
Оценка: 7 (2)
Здравствуйте, Joker3D, Вы писали:

JD>Прошу вас высказать свои соображения по вопросу: "нужен ли префикс p перед переменными-указателями" (MS VC++ 7.0)

JD>железные аргументы ЗА префикс 'p':

Нет.

JD>и железные аргументы ПРОТИВ префикса 'p':

Лишнее нажатие.

PS
Все — ИМХО.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[3]: префикс 'p' перед указателями...
От: vasketsov Россия http://ntprog.by.ru
Дата: 26.11.02 16:23
Оценка:
Здравствуйте, Joker3D, Вы писали:

JD>...но ведь можно же просто навести мышкой и увидеть во всплывающей подсказке тип переменной! ??? ... :


В notepad? В vi? В MSVS?
Васкецов Сергей
http://registry.km.ru
Re[4]: префикс 'p' перед указателями...
От: Joker3D Россия http://blog.trunin.com
Дата: 26.11.02 16:28
Оценка:
Здравствуйте, vasketsov, Вы писали:

V>Здравствуйте, Joker3D, Вы писали:


JD>>...но ведь можно же просто навести мышкой и увидеть во всплывающей подсказке тип переменной! ??? ... :


V>В notepad? В vi? В MSVS?


MSVS 7.0
Konstantin Trunin
http://blog.trunin.com — эффективное управление людьми, проектами, собой
Re: префикс 'p' перед указателями...
От: small_cat Россия  
Дата: 27.11.02 07:31
Оценка:
Еще раз добрый день.

В догонку к постингу http://rsdn.ru/forum/?mid=140426
Автор: small_cat
Дата: 27.11.02
в предыдущей ветке.

Перевод статьи о Hungary Notation http://users.omskreg.ru/~geht/BOOKS/HUNGAR.HTM
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Re[3]: префикс 'p' перед указателями...
От: _Kostya_  
Дата: 27.11.02 11:57
Оценка:
Здравствуйте, Joker3D, Вы писали:

JD>Здравствуйте, Кодт, Вы писали:


К>>Аргумент такой: нужно различать (хотя бы потому, что используются разные операторы доступа: "." и "->"); особенно это касается умных указателей, у которых есть оба оператора.


JD>...но ведь можно же просто навести мышкой и увидеть во всплывающей подсказке тип переменной! ??? ... :


Чтобы навести мышкой нужно оторвать руки от клавиатуры, потерять кучу времени, что сильно раздражает. А так сразу понятно, что это за хрень.
Re[4]: префикс 'p' перед указателями...
От: rihter Россия http://rihter.slash-x.net
Дата: 27.11.02 13:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Это же элементарно — префикс p используется везде — в Win32 API,MFC,ATL,WTL.

А>Поэтому проще следовать уже установленному соглашению, вместо того, чтобы изобретать что-то ещё.

Заползая на уровень ниже user mode, с удивлением обнаруживаем отсутствие префикса "p" направо и налево
Re: префикс 'p' перед указателями...
От: Joker3D Россия http://blog.trunin.com
Дата: 27.11.02 14:38
Оценка:
Всем здесь и в соседней ветке спасибо за аргументы!.. ...но... придется переучиваться....
Konstantin Trunin
http://blog.trunin.com — эффективное управление людьми, проектами, собой
Re[2]: префикс 'p' перед указателями...
От: McSeem2 США http://www.antigrain.com
Дата: 30.11.02 00:27
Оценка:
Здравствуйте, 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
Я жертва цепи несчастных случайностей. Как и все мы.
Re: префикс 'p' перед указателями...
От: old->*Plutonia_Experiment() Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.11.02 14:56
Оценка:
Здравствуйте, Joker3D, Вы писали:

Дело не в префиксе.Нужно писать так, что бы все понимали твой код.Те надо уметь писать сложные и не очень вещи очень просто, но не глупо, не линейно.

вот мои правила:

1. В проекте более чем на одного человека нужно соблюдать общий стиль — имена префиксы, отступы
и тд. Здесь я стараюсь улавливать все тонкости.

2. В самых сложных,глупых или некрасивых случаях ставить комментарии. Нет смысла усеивать код абзацами текста. Очень сложно читать код вперемежку с кодом. Зачем это надо ? Человек, который глянет на конструкцию, в которой более десятка операций, скорее всего испытает шок.
Это правило я постоянно нарушаю.

3. Функция должна занимать максимум 1 страницу. Так проще понять алгоритм. Перелистывая, сложно запомнитить все. Кто сомневается, тот скорее всего не работал с огромными проектами.
Нет таких людей, которые помнят все. Это иллюзия.
Иногда это правило приходится нарушать. Всяко бывает.

4. Конструкция должна иметь максимальный уровень вложенности не более 3х. Лучше будет несколько функций, которые вызываются из одного места, чем одна функция длинной сотни строк. В такой функции приходится при смене погоды править мелкие баги.
Это я соблюдаю в 90% случаев.
Re: префикс 'p' перед указателями...
От: deviv  
Дата: 02.12.02 13:29
Оценка:
Выскажу свои соображения по этому вопросу:

В С/С++ есть указатели принципиально отличаются от других "обычных" типов данных. Как часто вы работая с указателем, интересуетесь именно значением указателя (т.е. адресом), а не данными, на которые ссылается указатель? Я думаю многие ответят, что давольно редко, и то лишь при реализации механизма итерации или схожего с ним. На этапе проектирования системы, вообще нету понятия указателя. Как передовать объект — по значению/ссылке или по указателю — это часть реализации системы. Именно на этом факте основано мое убеждение в необходимости различать указатели по именам. Хотя бы для того, чтобы понять, нужно ли работать на прямую с значением переменной или его нужно предварительно разоменовать. Как различать — либо при помощи префикса, либо при помощи суффикса. Мне больше нравится префикс p.

/Влад
... << RSDN@Home 1.0 alpha 14 >>
WBR,
Влад Волосюк
Re: Оформление кода: префикс 'p' перед указателями...
От: -=[x]=- Россия  
Дата: 17.01.03 07:48
Оценка:
Здравствуйте, Joker3D, Вы писали:



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' перед указателями...
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 17.01.03 08:47
Оценка:
Здравствуйте, -=[x]=-, Вы писали:

JD>>железные аргументы ЗА префикс 'p':

JD>>.... ???
=>Знаешь, что это указатель

А если имя переменной начинается с буквы p? Можно, конечно, писать p_param...
... << RSDN@Home 1.0 beta 4 >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.