Russian Qt Forum
Ноябрь 24, 2024, 01:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 ... 7   Вниз
  Печать  
Автор Тема: как правильней писать указатель?  (Прочитано 42113 раз)
pethead
Гость
« : Октябрь 25, 2010, 14:32 »

варианты:

1. char * c
2. char* c
3. char *c

c си давно не занимался, просто интересно что думают более продвинутые специалисты?
разумеется компилер съест любой вариант, но с т.ч. логики, удобства как все таки лучше себя обучить писать?
ведь в дальнейшем применении buffer пишется уже без *, или может
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 25, 2010, 14:34 »

Как захочешь. Главное, чтобы было единообразно.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Октябрь 25, 2010, 15:02 »

Я стараюсь п.3 придерживаться к примеру. Но кому как...
Записан

ArchLinux x86_64 / Win10 64 bit
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Октябрь 25, 2010, 16:02 »

pethead
Записи
Код
C++ (Qt)
int* var1, var2;
int * var1, var2;
int *var1, var2;

равносильны:
Код
C++ (Qt)
int *var1;
int var2;
По этому писать при имени переменной (т.е. 3 вариант) будет нагляднее.

А вот возвращаемое значение функции, на мой взгляд, нагляднее, если писать наоборот:
Код
C++ (Qt)
int *someFunc();
int* someFunc();
Записан

Юра.
ufna
Гость
« Ответ #4 : Октябрь 25, 2010, 20:35 »

+1 Юрию, пользуюсь точно такой же системой именно по тем же соображениям

а вообще - главное унифицировать, а не "прыгать"
Записан
Alex_cs_gsp
Гость
« Ответ #5 : Октябрь 26, 2010, 19:45 »

Венгерская нотация уже не в моде?
Код:
char *pchVar;
int *pnVar;
unsigned *puVar

А насчет того где должно быть * есть соображения
char *pchVar1, *pchVar2

Если писать char*, то для второй переменной можно забыть указать *

Возвращать ф-ей указатель, честно говоря, считаю плохим стилем, особенно когда это ф-и или методы, которые создают объекты в динамической памяти, хотя такое используется даже в QT. Ведь, возвращаемое значение можно проигнорировать, и если, например, возвращается адрес выделенной памяти, то могут возникнуть утечки.
« Последнее редактирование: Октябрь 26, 2010, 20:03 от Alex_cs_gsp » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Октябрь 27, 2010, 19:34 »

>>Венгерская нотация уже не в моде?
неа. Ушла в историю в месте с Си.

object->method();

тут даже если коньяку поддал, всё равно поймёшь, что object - указатель
Записан

Юра.
pethead
Гость
« Ответ #7 : Октябрь 28, 2010, 04:09 »

всем спасибо.
теперь как то отложилось в голове.
в примерах из книжек от англ. авторов тоже везде по разному.
Записан
Alex_cs_gsp
Гость
« Ответ #8 : Октябрь 28, 2010, 10:00 »

>>Венгерская нотация уже не в моде?
неа. Ушла в историю в месте с Си.

object->method();

тут даже если коньяку поддал, всё равно поймёшь, что object - указатель

object->method();
глобальный объект или нет?

gpObject->method() или pObject->method(). А может быть у Вас константный объект, а метод не константный. kObject->setVal() ??
А префикс m_ для членов класса тоже нафиг? И причем тут Си. Си такой же строго типизированный язык как и С++, только, конечно, в первом приемы используются, которые в С++ не рекомендуются.
« Последнее редактирование: Октябрь 28, 2010, 10:07 от Alex_cs_gsp » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Октябрь 28, 2010, 14:52 »

>>глобальный объект или нет?
в программах на Си++ крайне редко возникает нужда создавать глобальные объекты. Обычно создают "одиночки" (в том числе именованные). Методы проектирования в языках с ООП совсем другие, чем в Си.

>>А может быть у Вас константный объект, а метод не константный. kObject->setVal() ??
и что?

>>А префикс m_ для членов класса тоже нафиг?
я использую только для классов, которые предназначены для наследования.
Записан

Юра.
igor_bogomolov
Гость
« Ответ #10 : Октябрь 28, 2010, 17:19 »

Оу, какой замечательный холиварчик  Улыбающийся

Си такой же строго типизированный язык как и С++
В С++ есть полиморфизм, поэтому добавление информации о типе к имени переменной считаю бессмысленным.

Добавление любых префиксов к имени переменной только усложняет читаемость кода (для всех, кроме автора). Никакой полезной информации они не несут. Мне, по крайней мере, она ни разу не пригодилась и вызывает только неприятие из-за того, что я должен постоянно добавлять какие то странные буковки.

Особенно меня раздражает код на подобии такого
Код
C++ (Qt)
void function(char *pchVar, int *pnVar, unsigned *puVar)
Мне все равно какого стиля придерживается разработчик некой библиотеки (если не приходится в этом коде копаться), но не надо это выносить на поверхность. Я и так вижу какой у переменных тип. Зачем их дублировать в именах переменной? Почему я должен разбираться во всех этих префиксах и помнить их?
Записан
ufna
Гость
« Ответ #11 : Октябрь 28, 2010, 17:48 »

я иногда добавляю такие вещи только "для себя" внутри классов, в основном к bool и к int.

Пример функции как выше - это да, не айс, имхо. У троллей на этот счет имхо отличные примеры - там по функции понятно все.
Записан
Alex_cs_gsp
Гость
« Ответ #12 : Октябрь 28, 2010, 18:48 »

>>А может быть у Вас константный объект, а метод не константный. kObject->setVal() ??
и что?

То, что для константного объекта только константный метод можно вызвать. Экономит время.


В С++ есть полиморфизм, поэтому добавление информации о типе к имени переменной считаю бессмысленным.

Полиморфизм, наоборот помогает делу. Полиморфизм имеет дело только с указателями и ссылками и никто вам не запрещает присваивать им соответствующий префикс, и соответственно знать тип объекта - базовый или производный. Хотя я сам очень редко использую в.н. для объектов.
То что запоминать не хочется, это Ваши проблемы. Мне, например, код хочется дома лежа не диване надиктовывать.
« Последнее редактирование: Октябрь 28, 2010, 18:58 от Alex_cs_gsp » Записан
igor_bogomolov
Гость
« Ответ #13 : Октябрь 28, 2010, 19:25 »

То что запоминать не хочется, это Ваши проблемы.
Вы написали одну библиотеку используя свою нотацию. Кто то написал другую используя свой стиль префиксов. И т.д. А мне, предположим, по каким то причинам нужно эти библиотеки использовать. Так что мне все нотации помнить надо? Это же совершенно бесполезная информация. И это действительно становится проблемой. Только создают её те кто подобную нотацию использует.

Мне, например, код хочется дома лежа не диване надиктовывать.
Трудно представить этот поток согласных букв В замешательстве
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #14 : Октябрь 28, 2010, 19:28 »

>>То, что для константного объекта только константный метод можно вызвать. Экономит время.
Дак, если код я пишу, то я знаю каким объектом пользуюсь. Если код уже написан и не компилируется, то компилятор мне скажет и покажет, где ошибка. Мало того, я больше не практикую паскалевский подход - объявить пачку (константных) переменных в начале функции, а потом где-то использовать. Я объявляю (константную) переменную перед непосредственным использованием, поэтому я не успеваю забыть о ней. Если в чужом коде всё также, то для меня нет проблемы.

И ещё, мне удобнее читать код буквально:
object->show()  - объект, показать
в такой ситуации для меня становится проблематично чтение дополнительных буковок.

П.С.
До Qt, увлекался разными приёмами сокращений. А в программах на Си, ещё и всякие префиксы использовал (псевдо ООП, если так можно сказать)
Записан

Юра.
Страниц: [1] 2 3 ... 7   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.122 секунд. Запросов: 23.