Estoy poniendo una serie de rutinas en un .h. Esas rutinas las llamo desde otro .h. Pero ahora necesito inlcuir el .h en el .cpp principal, pero me dice que ya existen todas esas rutinas. Cómo hago para cargar los .h sólo una vez? Gracias de antemano.
Por al principio del .h
#ifndef __loquequiera_H
#define __loquequiera_H
y al final del archivo:
#endif // __loquequiera_H
Se me olvidaba decir que no es muy elegante incluir codigo en los archivos cabeceras.
otra forma de hacer lo que ha dicho jpastor es poner un
#pragma once
al principio de la cabecera
¿Eso es ANSI?
Muchas gracias, jamás lo hubiera sabido sin preguntar.
Estoy creando las librerías de mi motor en archivos .h. Pero también se me ha ocurrido meter código libre dentro de un .h, y luego incluirlo dentro de una rutina. Sería bastante más limpio trabajar así que entre un montón de funciones utilitarias. Además me parece que C no es elegante... no creo que poder apelotar un montón de código en una sóla línea sea algo elegante. Por eso podría concluir que para programar Delphi es el elegante y C es el rápidillo.
OK como quieras,
Meter codigo en las cabeceras implica una repeticion innecesaria. Para cada .cpp que incluya la cabecera se creara una función, por lo que cada .cpp repetirá el código.
Cronodragón,
No estoy de acuerdo contigo, para mí la elegancia reside precisamente en la característica que tiene C de que una expresión tiene un valor que puedes utilizar en otra expresión, encadenando así sentencias con pocas 'palabras' en una línea.
Puedes desencadenar ejecución de código que parece mentira que una sola línea de programa pueda hacer, eso es elegancia. Reconozco que requiere aprender a leer y escribir C para captar esa sutileza, pero cuando lo consigues, es casi magia.
Un saludo,
MFlores.
Que bonito MFlores.
Si en vez de C pones un nombre de mujer, tienes un poema que ni Neruda xDD
Cronodragón yo de ti implementaría las funciones en cpp y no en h.
Y C es elegante si uno escribe elegantemente. Si no, puede salir un código ilegible. Como en todo xDD
Bueno, bueno, te vas aproximando tú también. :sonriendo:
El problema mas grave de escribir codigo en las cabeceras es q despues puede q tengas problemas al linkar puesto q puede haber simbolos q se redefinan (por ejemplo en cabeceras de librerias o dll's), y esos errores de link son asquerosos xDD
Saludos
_________________
main(int i,char **p){
int b;char *a=0;while( a[b=(int)"rvbolsf`Coz`lp-fp#.#pbovglp#"] ? printf("%c",a++^i): 0);
}
[ Este Mensaje fue editado por: ethernet el 2002-09-19 21:31 ]
jpastor y ethernet: bueno, eso se arregla colocando las funciones en las librerias correctas.
MFlores: es cierto que reunir código con macros es una forma más elegante de programar, pero sólo si aprendes a utilizarlo. En cambio Pascal te obliga a llevar un orden en el código, te enseña que cada cosa tiene su lugar, te enseña el sol que ilumina a las aves que vuelan en el cielo y te canta sobre la brisa que refrezca sus plumajes... ehmm, jústamente por eso fue hecho por un profesor universitario. Mientras que C fue hecho por ingenieros para hacer las cosas rápido y eficientemente.
NeLo:
CitarY C es elegante si uno escribe elegantemente. Si no, puede salir un código ilegible.
En todo caso tienes razón.
:sonriendo: :sonriendo: :sonriendo: :sonriendo: :sonriendo: :sonriendo:
XDDDDDDDDDDDD
[ Este Mensaje fue editado por: MFlores el 2002-09-20 09:16 ]
opino lo mismo, los lenguajes estilo pascal son un aparato para los dientes, para modelar la forma de programar de uno de una forma que un profesor universitario cree que es la correcta. C es la forma en la cual la gente que construye las cosas necesita que se hagan las cosas, es pragmatico. Ademas resulta que por la simplicidad que tiene C es tan hermoso como mucha gente piensa de las matematicas. Esa simplicidad es pureza. En cambio han intentado limpiar pascal una y mil veces de mecanismos ocultos, y nunca han tenido demasiado exito. Aparentemente estoy en contra de pascal, pero no es asi, tiene su lugar y su momento. Por ejemplo Delphi esta bien. Y cada cosa esta bien en su uso.