Si favorece “T * var”, ¿alguna vez escribe “T *”? [duplicar]

12

Pensando en donde colocamos nuestros asteriscos ; ¿Cómo escriben código los que prefieren mantener la "puntualidad" fuera del tipo y con el identificador ( int * i ) cuando falta el identificador?

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

El primero parece ser mucho más común, sin importar cuál sea su preferencia con el identificador. ¿Es este un caso especial? ¿Qué lo hace una excepción?

Sin embargo, el primero aún no es universal, porque he visto el último estilo. Además de la coherencia en la línea de "siempre hay un espacio con el identificador, así que tenemos uno sin", ¿hay otras razones para preferirlo?

¿Qué pasa con los tipos de moldes o matrices y funciones? ¿Cómo reescribirías esto?

(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)>

Los dos últimos raramente, si alguna vez, se usarían en C, pero se ven con plantillas de C ++.

    
pregunta Community 27.09.2010 - 12:02

4 respuestas

15

El objetivo debe ser hacer que el código sea legible y claro. El estilo int* a; puede parecer bien, pero cuando se convierte en int* a, b; implica algo diferente de lo que realmente es. Contraste con int *a, b; y int *a, *b; donde cada una se lee exactamente igual a la forma en que funciona.

La diferencia entre void f(int*); y void f(int *); para la legibilidad es despreciable, y no me puedo preocupar mucho de cuál se usa.

Cuando recuerdas el objetivo de nivel superior (legibilidad), es más fácil separar los nitpicks puros de los posibles problemas de comprensión / mantenimiento.

    
respondido por el dwc 14.12.2010 - 20:16
6

Siempre separo la estrella del tipo, así que uso:

void f(int *);

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

Obviamente, no separo los corchetes del identificador.

Así es como aprendí a hacerlo desde K & R, ¿y quién soy yo para discutir? (Además, parece ser la forma más fácil de leer).

    
respondido por el mipadi 27.09.2010 - 17:19
2

Definitivamente NO se trata de estilo, legibilidad, mantenibilidad o nada estético.

La sintaxis de C, y por lo tanto también C ++, lo requiere.

Aquí hay un ejemplo:

int *a, *b, *c;

Eso hace tres punteros.

Sin embargo:

int* a, b, c;

Eso hace un puntero, y dos pulgadas.

    
respondido por el doug65536 03.02.2013 - 09:13
1

A menos que se indique específicamente lo contrario, tiendo a seguir el paradigma de C para cosas como esas; a saber, T * , T [N] , T (*)() , etc., ya sea que esté escribiendo C o C ++, porque el puntero y la matriz y la función son todas funciones del declarador, no el especificador de tipo.

Sin embargo, seguiré el paradigma común para el idioma dado al declarar objetos:

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

¿Es esto una inconsistencia en mi estilo de codificación? Sí. ¿Es un gran problema? No hasta que alguien se queje de ello.

    
respondido por el John Bode 04.04.2012 - 16:47

Lea otras preguntas en las etiquetas