Estoy Aprendiendo

Iniciado por <<<-Basura->>>, 16 Marzo 2011, 18:30 PM

0 Miembros y 3 Visitantes están viendo este tema.

anonimo12121

mira mi ejemplo lo que hace es insertar un trozo de codigo
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

Akai

#11
Cita de: Don Pollo en 17 Marzo 2011, 15:44 PM
No hay ninguna diferencia, lo que haces con un #define es declarar constantes. Ahora, esas constantes pueden ser un valor o una expresión.

ERROR Si la hay, y es ENORME.

define: lo que esté despues de, por así decirlo, la etiqueta, se EMPOTRA directamente en el código, por el preprocesador, no se hace comprobación de tipos ni nada por el estilo, simplemente se sustituye, y ya.
Ejemplo:
Código (cpp) [Seleccionar]

#define cuadrado((a)) (a)*(a)

con el siguiente ejemplo:

Código (cpp) [Seleccionar]

i=4;
cuadrado(i++)


Resultado? 16, si, valor de la i=5? NO i=6. ¿WTF? Pensarán algunos.

Porque el preprocesador lo sustituye como:
Código (cpp) [Seleccionar]
i=4
(i++)*(i++)


Y por precedencia de operadores, se realiza la multiplicación, y luego los post-incrementos

Por otro lado, un define NO ocupa más memoria que la que ocupe el código definido y dicha memoria será ocupada en el espacio dedicado a código, mientras que una constante, es una variable, y que por tanto, ocupará su espacio en el segmento de memoria dedicado a variables.


Por otro lado, utilizando el ejemplo del cuadrado, mirad que pasa si hacéis esto:
Código (cpp) [Seleccionar]

cuadrado(cuadrado(i)*cuadrado(i))


Lo ideal sería suponer una implementación de este estilo:
Código (cpp) [Seleccionar]

res1=resultado_cuadrado(i)*resultado_cuadrado(i)
cuadrado(res1)


Pero, con los defines, al tratarse de código empotrado, se traduce como(es posible que me deje algo, pero básicamente es un infierno de calculo):
Código (cpp) [Seleccionar]
((i*i)*(i*i))*((i*i)*(i*i))

Por qué? Porque primero, traduce el cuadrado de i en i*i, y luego, la multiplicación de cuadrados en (i*i)*(i*i) PERO como luego eso se lo pasamos como "argumento", y nuestro define, coge dicho argumento y lo multiplica por si mismo, tenemos la tira infernal de arriba.

Los defines (macros) son peligrosos.

chocola

muy buena explicación Akai  ;-)

nos aconsejas algún guía o libro para seguir que nos haga ejemplos sobre programas con ejercicios para hacer ?=¿

Akai

#13
Libro... el que utilizo como referencia es:

C++ estándar (Programación con el estándar ISO y la Biblioteca de Plantillas (STL))
Enrique Hernández Orallo, José Hernandez Orallo, Mª Carmen Juan Lizandra
Paraninfo - Thomson Learning
ISBN: 84-9732-040-9

(daría un enlace para descargarlo, pero no he encontrado, la vez que busqué, algún pdf o similar con el libro)

Por otro lado, Littlehorse (moderador del subforo) suele recomendar uno que hay colgado en este post: http://foro.elhacker.net/programacion_cc/librospapers_cc-t296234.0.html

Name: Cómo Programar en C/C++
Author(s): Harvey M. Deitel, Paul J. Deitel
Hardcover: 1072 pages
Publisher: Prentice Hall; 2nd edition (February 1998)
ISBN-10: 9688804711
ISBN-13: 978-9688804711

(hay un enlace para descargarlo)

Yo utilizo el de C++ estándar porque me gustó cuando me lo recomendó un profesor en la facultad y lo saqué una temporada de la bilioteca y al final me lo terminé comprando. Sobre el de Deitel & Deitel, no tengo mayor referencia que el hecho que Littlehorse lo recomiende. (Si vas a buscar el de Deitel & Deitel, intenta buscar una edición más actual, que imagino que la habrá)

chocola

muxas gracias por su respuesta

pero una duda que tengo :
mi profesor me esta apretando para que en vez de impezar con c++ impezar con el visual studio 2010 express

no se pero yo veo que muxa gente recomienda el c++ .
cuales tu opinion ?=¿ a favor de cual estas ?=¿

ahora yo ya tengo el compilador gcc instalado en windows y me va bien
pero no me importaría nada de nada tener que cambiar
si hay que cambiar se hace, no hay problema

nota : el profesor me da clase de sistemas  actualmente no estoy dando clase de programación es una cosa mía que llevo aparte

muxas gracias .

Akai

Visual studio 2010 express es un IDE (Entorno de Desarrollo Integrado) que trae entre otras cosas el compilador Visual C++ 2010 de Microsoft. Lo que quizá tu profesor quiera es que usando visual studio tengas mayor facilidad a la hora de utilizar librerías de windows. Eso no lo se.

En principio, si ya tienes algo instalado, y lo otro no supone una gran mejora no veo por qué haya que cambiar, salvo que exista alguna razón en concreto, como por ejemplo el debugger de Visual Studio.

Eso lo tendrías que hablar ya con tu profesor.

Por otro lado, si aprendes C++ estándar, en teoría debería dar igual si lo haces en Visual Studio, en Code::Blocks, en Eclipse con el plugin CDT o usando emacs y compilando con g++ (compilador de C++ de gcc). El problema está cuando, por ejemplo, aprendes en base a usar librerías de windows o de linux mientras aprendes C++ (véase el uso de conio como caso ejemplo de ello)

chocola

gracias por su respuesta

pero no me has dicho tu opinion personal  :o  :silbar:

que me aconsejas tu seguir el c++ o el visual studio  ?=¿
y cuales tu opinion sobre utilizar las librerias de windows o de linux
es mejor utilizar las librerias de windows o de linux?=¿


muxisimas gracias de antelación .

RyogiShiki

Cita de: chocola en 17 Marzo 2011, 21:03 PM
gracias por su respuesta

pero no me has dicho tu opinion personal  :o  :silbar:

que me aconsejas tu seguir el c++ o el visual studio  ?=¿
y cuales tu opinion sobre utilizar las librerias de windows o de linux
es mejor utilizar las librerias de windows o de linux?=¿


muxisimas gracias de antelación .

Eso solo depende de Tí, quieres que tus programas sean portables? si así es entonces usa solo opciones Multiplataforma, pero en cambio ¿Quieres que tus aplicaciones solo funcionen en Windows? pues concentrate en WinAPI, o Solo en Linux?.

Por otro lado como partidario de las tecnologías libres siempre recomiendo GCC por la gran flexibilidad en las configuraciones y el basto soporte que tiene en la red. Pero entonces deberías usar los dos y analisar y definir en cual de los dos te sientes cómodo.

Saludos


Akai

Cita de: chocola en 17 Marzo 2011, 21:03 PM


que me aconsejas tu seguir el c++ o el visual studio  ?=¿
y cuales tu opinion sobre utilizar las librerias de windows o de linux
es mejor utilizar las librerias de windows o de linux?=¿

Vamos por partes (en principio, cada párrafo, respuesta a una de tus lineas):
Te recalco, C++ es un lenguaje de programación, Visual Studio es un entorno de desarrollo, nada que ver una cosa con la otra. Puedes "seguir el c++" en Visual Studio., o utilizar otros IDEs (Code::Blocks, Eclipse...). De la misma forma que en visual studio se pueden utilizar varios lenguajes, no únicamente C++

Mi opinión es que no se deberían utilizar librerías dependientes del Sistema Operativo cuando se enseña un lenguaje o se está empezando a enseñar programación.

Ver párrafo anterior. Una vez está eso claro... Yo únicamente he trabajo con las bibliotecas de Linux, y no tengo queja al respecto. Así que no puedo comparar unas y otras. En cualquier caso, si utilizas librerías de sistema, has de tener en cuenta que ya no la puedes utilizar en otro SO (Si usas las librerías de Windows, tu aplicación sólo podrá correr en windows. Si usas las de Linux, en sistemas compatibles con el estándar de Linux, y así)

anonimo12121

Que asco dais me habeis quemado mi circuito con ese define y el incremento.
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746