photo of Anibal

Error Prone

If you find yourself optimizing your code, then it means that the author of your compiler has failed.

Subscribe to RSS feed

Posts tagged with "C"

Vim estilo de color

, , ,

De una gama de color oscuro (fondo negro) me pasé a algo brillante (muy blanco).
Basado en la forma en que uso para colorear los códigos que pongo acá en my.opera, me creé éste estilo de color para [g]Vim, el cual me está gustando como va quedando.

Es bastante minimalista, no satura con mucho color (en si, lo baso en distintos tipos de letra sobre un mismo color, distingo cosas como strings, números y comentarios con colores distintos).

Read more...

GNU coding style really hurts my eyes.

, , ,

Como dijo alguna vez David Chisnall, uno de los grosos detrás de étoilé
Étoilé

After spending a little while poking at the GNU runtime, I came to two conclusions:

  • It was at least twice as complicated as it needed to be.
  • GNU coding style really hurts my eyes.



En si, había entendido la frase (y compartido también), pero nunca me vi en la necesidad de escribir/leer código con el estilo GNU (más allá de una que otra funcioncita perdida por ahí). Hace un tiempito, me metí a ver e intentar aportar al proyecto GNUStep (algo he hecho, he cambiado las macros de manejo de memoria, y he corregido un pequeño bug en una clase que no recuerdo), sin embargo, ahora quería ayudar un poco más profundo, cambiar unas funciones, detectar bugs y corregirlos, etc. Ahí es cuando uno empieza a ver código del estilo GNU.

Para poner en contexto, ésto es código GNU:
int una_funcion()
{
  int a;
  int b;

  printf("Ingrese un número: ");
  scanf("%d", &a);
  printf("Ingrese un número: ");
  scanf("%d", &b);

  if(a == b)
    {
      printf("a es igual a b");
    }
  else if(a > b)
    {
      printf("a es mayor a b, igualando valores");
      while(a > b)
        {
          a--;
        }
       printf("valores igualados");
     }
  else
    {
       printf("b es mayor a a");
    }
  return 0;
}

mmmta madre que costó escribir eso. Un código simple que no hace nada (lo de los scanf y todo eso me jode el buffer, pero bue, la base está), pide dos valores, si ambos son iguales, imprime que son iguales, si a es mayor, muestra la leyenda de que a es mayor y los iguala, y si no, dice que b es mayor. Lo importante es la forma en que está escrito que es la que la gente de GNU usa. Para ponerlo en contexto (y el por qué a mi me hace tanto mal), así es como yo hubiese escrito el código anterior:
int una_funcion()
{
  int a;
  int b;

  printf("Ingrese un número: ");
  scanf("%d", &a);
  printf("Ingrese un número: ");
  scanf("%d", &b);

  if(a == b){
    printf("Ambos valores son iguales");
  }else if(a > b){
    printf("a es mayor a b, igualando valores");
    while(a > b){
      a--;
    }
    printf("valores igualados");
  }else{
    printf("b es mayor a a");
  }

  return 0;
}


Otra cosa diferente, que tiene el estilo GNU,es que las llaves son opcionales cuando en una estructura de control le sigue una instrucción. Yo no, yo siempre uso llaves.

Evitando -lm

,

Menor número en una coleccion

, ,

De Dot Net Perls veo ésto al final:


....Sometimes it's effective to start an int at int.MaxValue when you are looking for the lowest value in a loop.



Je, muy bueno, pero yo prefiero algo más así:

Read more...

Cantidad de divisores de un número

, , ,

Me encontraba realizando un problema del project-euler y me encontré con un inconveniente. El problema en si es sencillo y a grandes rasgos se traduce en encontrar la cantidad de divisores de un número.
Problema 12 por si quieren verlo.

Read more...

Cortar un texto sin quitar las xhtml-tags

, ,

Éste es un pequeño código que demuestra lo desordenado que trabajo. Por lo general mi modus operandi es:
Tener una idea.
Codificarla hasta que anda (con todas las malas prácticas habidas y por haber).
Limpiarla hasta que quede más bonita y legible.
Aburrirme y abandonar el proyecto.

Lo bueno, es que la primer parte me divierte mucho y puedo pasar horas viendo, modificando, aprendiendo (sobre todo aprendiendo) y diciendome "pero que pelotudo, mirá lo que hice....".

Ahora si, el problema:


Tengo un texto largo (o corto no es el problema), yo quiero que los textos largos sean cortados hasta las primeras 256 letras, sin contar los tags de xhtml. O sea, si yo tengo un texto Anibal, éste tiene 6 letras. También lo que quiero es que el código resultante tenga todas sus tags bien cerradas (ésto, en el texto original está bien, asumo que no hay un texto que tenga alguna tag xhtml no cerrada).

Read more...

Leyendo las declaraciones correctamente

,

Cuando a uno le enseñan un lenguaje, y le enseñan las cosas básicas se encuentra con cosas como las declaraciones.
int *miVariable;


A lo cual uno directamente dice que miVariable es un puntero a int, lo cual no es del todo errado.

Hoy leyendo Cocoa With Love, más precisamente acá me encuentro una muy buena explicación de cómo leer éstas declaraciones:

Read more...

Frustrado

, , , ...

Acabo de terminar, por la fuerza, un chat con un personaje. En realidad es que no entiendo bien cómo puede ser que no se entienda. Paso a explicar lo sucedido. El personaje éste apareció por el foro el-hacker.net con preguntas, muchos le contestaron hasta el artasgo y se le sugirió comprar un libro. Como mi msn me resbala, yo tengo activado para que se agreguen, éste personaje se me agregó, como soy muy buena onda, siempre ayudo (bah, eso intento), por msn soy un poco más compasivo y le explico, muchas veces me terminó cansando y le escribía un código en no más de 2 minutos y se lo regalaba. Hace como una semana llegó con un problema un tanto avanzado, estuve no se cuanto tiempo tratando de hacerlo comprender su error y cómo podía solucionarlo, a los pocos días recibí un correo de que aún no le salía que si no podía ayudarlo a corregir, yo le contesté muy mal (la verdad que no había visto el archivo adjunto), por culpa cuando vi el archivo adjunto dediqué un buen tiempo a explicar y dar paso por paso cómo funcionaba y qué debía hacer para descubrir el error. Grata fue mi sorpresa que el perder esa cantidad de tiempo no sirvió de nada. El código en cuestión:

float decimal (float n)
{
  int m,L;
  float d,k,N;

  k=n*10;
  m=k/10;
  d=n-m;
  N=d*10;

  while((L%10)!=0)
  {
    N=N*10;
    int(L=N*10);
  }

  return N;
}


NOTA: quiero decir que mi intención no es tildar de nada a éste personaje (incluso cambié su mail por Anonimo, lo cual quiero dejar en claro que si se llega a nombrar en algún comentario, si llegase a haber alguno, será editado por mi y borrado.

Read more...

Diferencias entre char *string y char string[]

, ,

Existen 3 formas de definir un string en C:
char *puntero_a_char = "Valor inicial";
char sin_definir_tamanio[] = "Valor inicial";
char definendo_tamanio[TAMANIO] = "Valor inicial";


¿cuál es la diferencia entre ambas?

Read more...

Si juegas con la memoria, la puedes cagar

, ,

Trataré de mostrar un par de cosas que, pueden (o no) ser interesantes, pueden (o no) ser de utilidad, respecto a la memoria dinámica en C, puede ser aplicable a C++, pero no me interesa ésto por ahora.

Pondré aquí un ejemplo, útil o no, sobre el manejo de memoria (un poco avanzado lo considero yo):

Read more...

February 2012
M T W T F S S
January 2012March 2012
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29