ti-enxame.com

Se você é a favor de "T * var", alguma vez escreveu "T *"?

Possível duplicata:
int * i; ou int * i; ou int * i;

Pensando em onde colocamos nossos asteriscos ; como aqueles que preferem manter a "pontaria" longe do tipo e com o identificador ( int * i) escrevem o código quando o identificador está faltando?

void f(int*); // 1
void f(int *); // 2

O primeiro parece muito mais comum, não importa qual seja sua preferência ao usar o identificador. Este é um caso especial? O que o torna uma exceção?

No entanto, o primeiro ainda não é universal, porque eu vi o último estilo. Além da consistência ao longo das linhas de "sempre há um espaço com o identificador, então temos um sem", há algum outro motivo para preferi-lo?

E quanto aos tipos de casts ou array e função? Como você reescreveria estes:

(void*)var /*or*/ (void *)var

int[3] /*or*/ int [3]
// more relevant in C++ than C: Example<int[3]>

void(int) /*or*/ void (int)
// more relevant in C++ than C: std::function<void(int)>

Os dois últimos raramente, ou nunca, seriam usados ​​em C, mas são vistos com modelos C++.

12
Roger Pate

O objetivo deve ser tornar o código legível e claro. O estilo int* a; Pode parecer bom, mas quando se torna int* a, b; Implica em algo diferente do que realmente é. Compare com int *a, b; E int *a, *b; Onde cada um é lido exatamente como funciona.

A diferença entre void f(int*); e void f(int *); para legibilidade é insignificante, e não consigo me importar muito com qual deles é usado.

Quando você se lembra da meta de nível superior (legibilidade), é mais fácil separar os nitpicks puros de possíveis problemas de compreensão/manutenção.

15
dwc

Eu sempre separo a estrela do tipo, então eu uso:

void f(int *);

void f(int *x)
{
    char *y = (char *) x;
    char x[4];
}

Obviamente, não separo os colchetes do identificador.

Foi assim que aprendi a fazer isso com K&R, e quem sou eu para discutir? (Além disso, parece ser a forma mais legível.)

6
mipadi

Definitivamente NÃO é sobre estilo, legibilidade, manutenção ou qualquer coisa estética.

A sintaxe do C e, portanto, também do C++, exige isso.

Aqui está um exemplo:

int *a, *b, *c;

Isso dá três dicas.

Contudo:

int* a, b, c;

Isso dá um ponteiro e dois ints.

2
doug65536

A menos que seja especificamente instruído de outra forma, tendo a seguir o paradigma C para coisas assim; a saber, T *, T [N], T (*)(), etc., se estou escrevendo em C ou C++, porque a condição de ponteiro e matriz e função são todas funções do declarador, não do especificador de tipo.

No entanto, vou seguir o paradigma comum para a linguagem dada ao declarar objetos:

T* foo; // C++
T *bar; // C

Isso é uma inconsistência no meu estilo de codificação? Sim. Isso é relevante? Não até que alguém reclame sobre isso.

1
John Bode