Comentarios
subjetivos sobre la notación húngara se pueden encontrar muchos, por ejemplo en la pagina de Charles Petzold. No solo eso, en libros considerados "argumentos de autoridad" hay lineamientos que abren la puerta a todo tipo de discusiones.
Por ejemplo en la biblia de C++ (el libro "The C++ Programing Language") BS recomienda, entre otras cosas, el uso de fuentes proporcionales (y para alinear el texto eso implica el uso de tabuladores en lugar de espacios).
Sin tratar de echarle mas leña al fuego a la discusión en el sentido de "¿cual es mejor?" un documento interesante es:
Making Wrong Code Look Wrong by Joel Spolsky.
Hay que tomarlo de forma objetiva, mente abierta y cada quien sacara sus propias conclusiones.
----
Un cuestionamiento
objetivo en contra del uso de nombres como "__pp_back" es el siguiente.
1) Al utilizar nombres de encabezados terminados con ".h" como "<stdio.h>" el nombre de espacios utilizado es el global.
2) En C (y eso incluye las facilidades de su biblioteca estándar) los nombres con un guion bajo inicial están reservados.
Si bien el riesgo de un conflicto de nombres es bajo seria mejor evitarlo ya sea utilizando los nombres "políticamente correctos" como "<cstdio>" o bien evitando los nombres en la forma ya mencionada.
----
En cuanto al programa de
BlackZeroX este se puede mejorar, esto por varias razones. La primera es que la variable "__pp_back" solo se utiliza para almacenar el valor de "__pp_vector" sin que ninguna de ellas sea modificada, por ello esa variable se puede eliminar.
De forma similar a free se puede utilizar delete, no es necesario verificar si se pasa un puntero nulo ya que el comportamiento esta garantizado (no pasa nada). Eso nos lleva a eliminar la ultima sentencia condicional.
A la variable "__new_ptr" se le da un valor inicial de NULL, eso nos lleva a eliminar (por superflua) la rama (y asignación) en:
}else
__new_ptr = NULL;
Por ultimo un detalle que debo admitir si es subjetivo: al utilizar 0 en lugar de NULL evitamos incluir <cstdio>.
Con esos cambios (mas la nomenclatura al gusto) quedaría así:
#include <cstring>
using std::memcpy;
#include <algorithm>
using std::min;
void **RedimPreserve(void **buffer, size_t size, size_t new_size)
{
if (size == new_size)
return buffer;
void **new_buffer = 0;
if (new_size > 0) {
new_buffer = new void *[new_size];
if (size > 0 && buffer != 0)
memcpy(new_buffer, buffer, min(size, new_size) * sizeof (void*));
}
delete[] buffer;
return new_buffer;
}
int main()
{
char **msg = NULL;
msg = (char**) RedimPreserve((void**) msg , 00 , 10);
msg = (char**) RedimPreserve((void**) msg , 10 , 11);
msg = (char**) RedimPreserve((void**) msg , 11 , 10);
msg = (char**) RedimPreserve((void**) msg , 10 , 00);
msg = (char**) RedimPreserve((void**) msg , 00 , 13);
msg = (char**) RedimPreserve((void**) msg , 13 , 20);
delete[] msg;
return 0;
}
Un saludo