Что мотивирует синтаксическое предпочтение в отношении объявления указателя в C /C ++? [Дубликат]

    

У этого вопроса уже есть ответ:

    

Ниже перечислены допустимые объявления указателей в C /C ++:

int *x;
int* x;

Первое кажется предпочтительным для опытных программистов на C /C ++. Я лично считаю, что последнее легче понять - это иллюстрирует, что указатель - это фактор типа переменной, а не его имя. Кроме того, это унифицирует стилистическое объявление указателей и функций, возвращающих указатели:

int* foo(); //foo returns an int*
int* x;     //x is an int*
int *foo(); //generally unused (in my experience)
int *x;     //feels wrong in this context

int *x кажется противоречивым, несмотря на то, что он является нормой, поэтому я чувствую, что должен что-то игнорировать.

Что мотивирует синтаксические предпочтения относительно объявления указателя в C /C ++?

3 голоса | спросил Conduit 7 ThuEurope/Moscow2017-12-07T20:22:31+03:00Europe/Moscow12bEurope/MoscowThu, 07 Dec 2017 20:22:31 +0300 2017, 20:22:31

1 ответ


3

Обе формы имеют одинаковый синтаксис. Они отличаются только расстоянием.

Первая форма предпочтительна, поскольку она хорошо отражает семантику: указатель предназначен только для переменной, которая сразу же следует за звездой:

int *p, a; // p is pointer, a is plain int

Вторая форма может вводить в заблуждение, поскольку создается впечатление, что указатель относится к типу и применим для всех переменных в одном и том же выражении:

int* p, a; // still, only p is pointer, a is plain int despite impressions
ответил Christophe 7 ThuEurope/Moscow2017-12-07T20:46:10+03:00Europe/Moscow12bEurope/MoscowThu, 07 Dec 2017 20:46:10 +0300 2017, 20:46:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132