edición general

Listas enlazadas, trucos con punteros y buen gusto [ENG]

#1 "si tienes que revisar el código meses después...." eso va a dar igual, siempre siempre.., te preguntarás .., cómo llegaste a esa solución.

Linus, tiene razón, cuanto más general sea el código mejor, porque podrá sacarte de más apuros en más ocasiones, reutilizando esa estrategia probada más veces en más escenarios.

Además cuantas menos excepciones tengas en el código menos puntos de ruptura y más liviano el código que se ejecuta, que a fin de cuentas es.., es lo que importa. Quiero que mi windows, linux, office, ....etc, funcionen, lo que piense el programador es irrelevante, si puede o no puede mantenerlo 4 meses después...
#3 Que sea legible o más tosco no quiere decir que funcione peor.
Yo sólo hablo desde mi punto de vista de zote. Leer código muy pulido como este cuesta más trabajo de análisis, y a veces modificarlo es más complicado que uno obvio que quizá va a ocupar sólo unos bytes más.

En este caso concreto se trata de una operación muy habitual en C con cadenas de punteros. La primera solución es obvia para cualquier desarrollador en C. La segunda requiere una explicación, como demuestra el artículo.

Claro que no me comparo con Torvalds, que supongo que será un monstruo en C. Sólo digo que personalmente el código legible facilita mucho el trabajo y se cometen menos errores.
#1 #5 El problema es que la legibilidad depende de quien lee, no de quien escribe. Lo que a ti te puede parecer obvio, a otros no, y viceversa. Y depende también especialmente de los conocimientos que se tengan del lenguaje en cuestión (y también estoy de acuerdo con #3 en este punto).

En este caso basta con tener conocimientos normales de C para entenderlo (no así para desarrollarlo, ese es otro tema), por lo que yo siempre iré por la solución óptima en lugar de la más “legible” por las razones antes indicadas.

#8 En cero, por supuesto, porque un array (en C) no es más que una suma de un número (puntero al primero elemento) más un offset, que es cero, evidentemente, para el primer elemento ;)

Otra cosa son los arrays en Pascal, en D, en Java, en Javascript… que aunque también empiezan en cero, su implementación es totalmente diferente.

menéame