Re: Как правильно char* a или char *a ?
От: rg45 СССР  
Дата: 23.07.18 06:10
Оценка: 21 (2) +13
Здравствуйте, Submitter, Вы писали:

S>Везде и так, и так. Как правильно?


Это всего лишь вопрос стиля кодирования. С точки зрения синтаксиса, эти варианты равнозначны.

О чем важно помнить, что, например в таком варианте:

char* a, b;


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

char *a, b;


Ну а по большому счету — дело вкуса.
--
Отредактировано 23.07.2018 6:18 rg45 . Предыдущая версия .
Как правильно char* a или char *a ?
От: Submitter  
Дата: 23.07.18 05:10
Оценка: :))
Везде и так, и так. Как правильно?
Re: Как правильно char* a или char *a ?
От: mbait  
Дата: 26.07.18 05:11
Оценка: 2 (1)
Здравствуйте, Submitter, Вы писали:

S>Везде и так, и так. Как правильно?


В Си более каноничный вариант
char *a

потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'. Видимо, это ломает неокрепшие умы ещё больше чем само понятие "указателей", поэтому многим проще представлять указатели как отдельный тип и потому писать "char*".

Теоретически в С++ так же, но там одни наркоманы, поэтому в проектах на С++ в 99.9% соглашение о кодировании — приписывать оператор к имени типа, а не переменной.

Что интересно: те, кто радеют за "char*" мало задумаваются, что указатель на функцию объявляется как
type (*name)(type1, type2, ...)

и при всём желании звёздочку не припишешь к имени типа.
Re: Как правильно char* a или char *a ?
От: Qt-Coder  
Дата: 23.07.18 05:20
Оценка: :)
Здравствуйте, Submitter, Вы писали:

S>Везде и так, и так. Как правильно?

Я ваще так пишу char * a
Re: Как правильно char* a или char *a ?
От: uzhas Ниоткуда  
Дата: 27.07.18 10:49
Оценка: :)
Здравствуйте, Submitter, Вы писали:

S>Как правильно?


std::string a;
Re[4]: сhar a, *b ;)
От: B0FEE664  
Дата: 27.07.18 12:17
Оценка: +1
Здравствуйте, 0x7be, Вы писали:

BFE>>На работе такое запрещено правилами кодирования.

0>Узко мыслите, господа!

Никто не знает С++ ибо нельзя объять необъятное. Поэтому приходится ставить рамки и не страдать извращениями прошлого века.
И каждый день — без права на ошибку...
Re[2]: Как правильно char* a или char *a ?
От: Mihas  
Дата: 26.07.18 06:37
Оценка:
Здравствуйте, mbait, Вы писали:

M>В Си более каноничный вариант

M>
M>char *a
M>

M>потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'. Видимо, это ломает неокрепшие умы ещё больше чем само понятие "указателей", поэтому многим проще представлять указатели как отдельный тип и потому писать "char*".
Что-то смутно вспоминается, что об этом говорилось с первых страниц книжки по С. Не путаю?
Re[3]: Как правильно char* a или char *a ?
От: mbait  
Дата: 26.07.18 11:27
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Что-то смутно вспоминается, что об этом говорилось с первых страниц книжки по С. Не путаю?


Книг по Си очень много, о какой идёт речь? Но в любом случае, я прочитал об этом не в книге, мне такой подход показался наиболее логичным, и я решил поделиться. Вообще, сам спор не имеет смысла, потому что есть конструкции вида
const * int * a

которые ломают всю логику
Re[4]: Как правильно char* a или char *a ?
От: rg45 СССР  
Дата: 26.07.18 12:17
Оценка:
Здравствуйте, mbait, Вы писали:

M>Вообще, сам спор не имеет смысла, потому что есть конструкции вида

M>
M>const * int * a
M>

M>которые ломают всю логику

Что-то ты перемудрил здесь. Такая конструкция не является синтаксически допустимой и не скомпилируется.
--
Re[5]: Как правильно char* a или char *a ?
От: mbait  
Дата: 26.07.18 12:28
Оценка:
Здравствуйте, rg45, Вы писали:

R>Что-то ты перемудрил здесь. Такая конструкция не является синтаксически допустимой и не скомпилируется.


Хотел написать
const int * const * a
Re[6]: Как правильно char* a или char *a ?
От: rg45 СССР  
Дата: 26.07.18 13:01
Оценка:
Здравствуйте, mbait, Вы писали:

R>>Что-то ты перемудрил здесь. Такая конструкция не является синтаксически допустимой и не скомпилируется.


M>Хотел написать

M>
M>const int * const * a
M>


Интересно, как ты применишь здесь сформулированный тобой принцип:

потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'.


--
Re: сhar a, *b ;) (-)
От: 0x7be СССР  
Дата: 26.07.18 13:17
Оценка:
Re[7]: Как правильно char* a или char *a ?
От: mbait  
Дата: 26.07.18 22:04
Оценка:
Здравствуйте, rg45, Вы писали:

R>

R>потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'.


Никак. Почитай всю цепочку внимательнее. Сначало я говорю про простой случай, описанный ТС, а потом уточняю, что есть случаи, когда никакая логика не применима. Но раз уж ты спросил, то можно попробовать читать задом наперёд: 'a' can be de-referenced (read-only) to something that can be de-referenced (read-only) to int. "Звёзды" в таком случае я предпочитаю оставлять отдельно от остальных слов.

const int * const * a
Re[2]: сhar a, *b ;)
От: B0FEE664  
Дата: 27.07.18 09:29
Оценка:
На работе такое запрещено правилами кодирования.
И каждый день — без права на ошибку...
Re[3]: сhar a, *b ;)
От: 0x7be СССР  
Дата: 27.07.18 10:46
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>На работе такое запрещено правилами кодирования.

Узко мыслите, господа!
Re: Как правильно char* a или char *a ?
От: andyp  
Дата: 27.07.18 11:15
Оценка:
Здравствуйте, Submitter, Вы писали:

S>Везде и так, и так. Как правильно?


И так и так. Как везде.
Re[2]: Как правильно char* a или char *a ?
От: T4r4sB Россия  
Дата: 27.07.18 11:23
Оценка:
Здравствуйте, mbait, Вы писали:

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


S>>Везде и так, и так. Как правильно?


M>В Си более каноничный вариант

M>
M>char *a
M>

M>потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'.

А char& a читается как "указатель на a имеет тип char"
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re: Как правильно char* a или char *a ?
От: klopodav  
Дата: 27.07.18 12:41
Оценка:
S>Везде и так, и так. Как правильно?

Дело вкуса, но мне чуть больше нравится вариант

char* a;


Нравится из таких соображений: когда бегло посматриваешь исходник и в нем надо найти объвление переменной — проще зацепиться взглядом, если имя переменной представлено в виде отдельного слова "в чистом виде", без символов-засорителей.
А звездочка после названия типа уже ничему не мешает — ибо при таком беглом полуподсознательном поиске тип переменной будет ключом поиска гораздо реже, чем ее имя
Re[6]: Как правильно char* a или char *a ?
От: prog123 Европа  
Дата: 27.07.18 20:39
Оценка:
Здравствуйте, mbait, Вы писали:

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


R>>Что-то ты перемудрил здесь. Такая конструкция не является синтаксически допустимой и не скомпилируется.


M>Хотел написать

M>
M>const int * const * a
M>


Поэтому чтобы не путаться, надо писать так и читать справа налево: переменная а является указателем на константный указатель на константный int
int const * const * a;

Можно даже так, уже не запутаешься
int const * const * const a;
Re[3]: Как правильно char* a или char *a ?
От: mbait  
Дата: 27.07.18 22:17
Оценка:
Здравствуйте, T4r4sB, Вы писали:

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


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


S>>>Везде и так, и так. Как правильно?


M>>В Си более каноничный вариант

M>>
M>>char *a
M>>

M>>потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'.

TB>А char& a читается как "указатель на a имеет тип char"


char& a;


Это уже С++, а там никаких особых идеологий не было, а было "давайте переиспользовать символы необычным способом". И судя по С++1x традиция исправчно чтится. Я бы сделал ссылку через '@' от "alias", например.
Re[4]: Как правильно char* a или char *a ?
От: mbait  
Дата: 27.07.18 22:20
Оценка:
Здравствуйте, mbait, Вы писали:

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


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


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


S>>>>Везде и так, и так. Как правильно?


M>>>В Си более каноничный вариант

M>>>
M>>>char *a
M>>>

M>>>потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'.

TB>>А char& a читается как "указатель на a имеет тип char"


M>
M>char& a;
M>


M>Это уже С++, а там никаких особых идеологий не было, а было "давайте переиспользовать символы необычным способом". И судя по С++1x традиция исправчно чтится. Я бы сделал ссылку через '@' от "alias", например.


Точнее, если я правильно понимаю, идея была не добавлять новые токены в синтаксис, а когда уже поняли, что идея плохая, было очень поздно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.