#ifndef #ifdef #endif??

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

#ifndef #ifdef #endif??

Notapor migueleitorone » Mar Ago 31, 2010 3:03 pm

Hola, he empezado a tocar SDL con un conocimiento bastante basico de c, y me surgen algunas dudas leyendo el tutorial de SDL

Código: Seleccionar todo
// Listado: compatibilidad_video.h

#ifndef _COMPATIBILIDAD_SDL_
#define _COMPATIBILIDAD_SDL_

// Precondición: Subsistema de video de SDL activo.
// Postcondición: Realiza comprobaciones de compatibilidad de
// SDL con varias opciones de inicialización.


void compatibilidad_video_sdl(int w, int h, int bpp);


#endif


Segun he leido, #define sirve para declarar una constante?
y #ifndef comprueba que esa constante no este declarada?
Es asi? Por que hacer eso?
Que representa que es _COMPATIBILIDAD_SDL_, es ningun momento se usa en todo el codigo:

Código: Seleccionar todo
1 // Listado: compatibilidad_video.c
2 ;// Comprueba la compatibilidad del sistema con los modos de video de libsdl
3 ;// mediante el método ensayo-error
4 ;
5 ;#include <stdio.h>
6 ;#include <SDL/SDL.h>
7 ;#include "compatibilidad_video.h"
8 ;
9 ;
10 ;void compatibilidad_video_sdl(int w, int h, int bpp)
11 ;{
12 ;
13 ; // Nuestro "rectángulo" gráfico con la información de video a mostrar;
14 ;
15 ; SDL_Surface *pantalla;
16 ;
17 ; // Vamos a probar los diferentes parametros de SetVideoMode
18 ;
19 ; // Almacenando la superficie en memoria principal a w x h x bpp
20 ;
21 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_SWSURFACE);
22 ;
23 ; if(pantalla == NULL)
24 ; printf("SDL_SWSURFACE %d x %d x %d no compatible. Error: %s\n",
25 ; w, h, bpp, SDL_GetError());
26 ; else
27 ; printf("Compatible con SDL_SWSURFACE %d x %d x %d\n", w, h, bpp);
28 ;
29 ; // Almacenando la superficia en memoria de video a w x h x bpp
30 ;
31 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_HWSURFACE);
32 ;
33 ; if(pantalla == NULL)
34 ; printf("SDL_HWSURFACE %d x %d x %d no compatible. Error: %s\n",
35 ; w, h, bpp, SDL_GetError());
36 ; else {
37 ;
38 ; printf("Compatible con SDL_HWSURFACE %d x %d x %d\n", w, h, bpp);
39 ;
40 ; // ¾Es compatible con el doble búffer? Sólo con HWSURFACE
41 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_HWSURFACE | SDL_DOUBLEBUF);
42 ; if(pantalla == NULL)
43 ; printf("SDL_DOUBLEBUF %d x %d x %d no compatible. Error: %s\n",
44 ; w, h, bpp, SDL_GetError());
45 ; else
46 ; printf("Compatible con SDL_DOUBLEBUF %d x %d x %d\n", w, h, bpp);
47 ; }
48 ;
49 ; // Blit asíncrono para mejorar rendimiento en máquinas multiprocesador
50 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_ASYNCBLIT);
51 ; if(pantalla == NULL)
52 ; printf("SDL_ASYNCBLIT %d x %d x %d no compatible. Error: %s\n",
53 ; w, h, bpp, SDL_GetError());
54 ; else
55 ; printf("Compatible con SDL_ASYNCBLIT %d x %d x %d\n", w, h, bpp);
56 ;
57 ; // Forzamos los bpp en modo ventana
58 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_ANYFORMAT);
59 ; if(pantalla == NULL)
60 ; printf("SDL_ANYFORMAT %d x %d x %d no compatible. Error: %s\n",
61 ; w, h, bpp, SDL_GetError());
62 ; else
63 ; printf("Compatible con SDL_ANYFORMAT %d x %d x %d\n", w, h, bpp);
64 ;
65 ;
66 ; // Acceso exclusivo a la paleta de color
67 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_HWPALETTE);
68 ; if(pantalla == NULL)
69 ; printf("SDL_HWPALETTE %d x %d x %d no compatible. Error: %s\n",
70 ; w, h, bpp, SDL_GetError());
71 ; else
72 ; printf("Compatible con SDL_HWPALETTE %d x %d x %d\n", w, h, bpp);
73 ;
74 ;
75 ; // Modo a pantalla completa
76 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_FULLSCREEN);
77 ; if(pantalla == NULL)
78 ; printf("SDL_FULLSCREEN %d x %d x %d no compatible. Error: %s\n",
79 ; w, h, bpp, SDL_GetError());
80 ; else
81 ; printf("Compatible con SDL_FULLSCREEN %d x %d x %d\n", w, h, bpp);
82 ;
83 ;
84 ; // Crear un contexto OpenGL en la superficie
85 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_OPENGL);
86 ; if(pantalla == NULL)
87 ; printf("SDL_OPENGL %d x %d x %d no compatible. Error: %s\n",
88 ; w, h, bpp, SDL_GetError());
89 ; else
90 ; printf("Compatible con SDL_OPENGL %d x %d x %d\n", w, h, bpp);
91 ;
92 ;
93 ; // Crear un contexto OpenGL en la superficie y
94 ; // permitir renderizado opengl
95 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_OPENGLBLIT);
96 ; if(pantalla == NULL)
97 ; printf("SDL_OPENGLBLIT %d x %d x %d no compatible. Error: %s\n",
98 ; w, h, bpp, SDL_GetError());
99 ; else
100 ; printf("Compatible con SDL_OPENGLBLIT %d x %d x %d\n", w, h, bpp);
101 ;
102 ; // Permite que la superficie principal pueda cambiarsele el tamaño
103 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_RESIZABLE);
104 ; if(pantalla == NULL)
105 ; printf("SDL_RESIZABLE %d x %d x %d no compatible. Error: %s\n",
106 ; w, h, bpp, SDL_GetError());
107 ; else
108 ; printf("Compatible con SDL_RESIZABLE %d x %d x %d\n", w, h, bpp);
109 ;
110 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_NOFRAME);
111 ; if(pantalla == NULL)
112 ; printf("SDL_NOFRAME %d x %d x %d no compatible. Error: %s\n",
113 ; w, h, bpp, SDL_GetError());
114 ; else
115 ; printf("Compatible con SDL_NOFRAME %d x %d x %d\n", w, h, bpp);
116 ;
117 ;
118 ;}


Lo siento si es una duda muy basica pero de verdad que no lo entiendo, gracias por la ayuda :D
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: #ifndef #ifdef #endif??

Notapor Juanxo » Mar Ago 31, 2010 3:55 pm

la próxima vez que digas lo siento voy donde quiera que estés y te doy una colleja xD.

C++ utiliza una cosa conocida como preprocesador y que actúa antes de que se compile el código. Su función: comprobar todas las directivas de preprocesador(las que empiezan con #) y ejecutar una serie de acciones

El caso es que, tanto C como C++, pueden usar unos ficheros (.h) que permiten declarar prototipos de funciones, clases, etc. una única vez, en vez de tener que declararlas cada vez en cada fichero que quiera usarlas. Todo empieza con la directiva #include, que lo que hace es sustituir el #include "fichero.h" por todo lo que haya en "fichero.h". El problema viene cuando hay dos ficheros que necesitan incluir el mismo ".h", ya que hemos copiado lo mismo 2 veces, y nos va a dar un error de redefinicion (prueba a compilar sin algunos de los #ifndef #define #endif)

Por eso la solución es lo que ves:

Código: Seleccionar todo
#ifndef VARIABLE // Si no esta definido este nombre (es la primera vez que incluyo el fichero)
#define VARIABLE // La defino y me aseguro que nunca vuelva a incluirse el codigo ( la próxima vez que alguien haga #include "fichero.h", el preprocesador verá que VARIABLE esta definida y saltará todo hasta #endif, dejando lo del interior sin copiar)

prototipos, clases, funciones
....
#endif
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: #ifndef #ifdef #endif??

Notapor migueleitorone » Mar Ago 31, 2010 8:49 pm

Juanxo escribió:la próxima vez que digas lo siento voy donde quiera que estés y te doy una colleja xD.

Entonces no lo siento :oops: XDD

Bueno, entonces #ifndef verifica que la variable no este definida y de ser asi se ejecuta el codigo, entonces #ifdef es al reves ? Verifica que este definida y se ejecuta el codigo?
Lo que sigue sin quedarme claro es para que definir "_COMPATIBILIDAD_SDL_" sino se usa en el codigo, igual me estoy perdiendo algo, pero diria que no tiene ningun tipo de utilidad :S
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: #ifndef #ifdef #endif??

Notapor Juanxo » Mar Ago 31, 2010 11:20 pm

Así me gusta más xD

el tema de usar #define es para que la variable quede definida (da igual su valor, solo te importa que este definida). Y para que te preguntas? para que la proxima vez que abra el fichero, vea que _COMPATIBILIDAD_SDL_ esta definida, por lo que #ifndef _COMPATIBILIDAD_SDL_ seria falso y no copiaría el codigo de dentro, evitando redefiniciones. Prueba a quitar el #ifndef #define #endif y verás como te dice algo de redefinicion, siempre que haya más de un include del mismo fichero.
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: #ifndef #ifdef #endif??

Notapor migueleitorone » Mar Ago 31, 2010 11:37 pm

Entonces _COMPATIBILIDAD_SDL_ simplemente se define, no se le da un valor, cierto?
Por que en vez definirla en "compatibilidad_video.h", no se define en el main y se evita el problema de la redefinicion? Cosa del programador o se suele hacer asi?
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: #ifndef #ifdef #endif??

Notapor Juanxo » Mar Ago 31, 2010 11:47 pm

si, simplemente la define, sin darle valor.
el problema de si la defines en el main, es que cuando hagas el #include del fichero donde este el #ifndef COMPATIBILIDAD_SDL, COMPATIBILIDAD_SDL ya estará definida y nunca incluirá el código de dentro.

voy a ver si encuentro alguna página que te lo explique mejor
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: #ifndef #ifdef #endif??

Notapor migueleitorone » Mié Sep 01, 2010 12:39 am

creo que lo he entendido.
Código: Seleccionar todo
1 // Listado: compatibilidad_video.h
2 ;
3 ;#ifndef _COMPATIBILIDAD_SDL_
4 ;#dene _COMPATIBILIDAD_SDL_
5 ;
6 ;// Precondición: Subsistema de video de SDL activo.
7 ;// Postcondición: Realiza comprobaciones de compatibilidad de
8 ;// SDL con varias opciones de inicialización.
9 ;
10 ;
11 ;void compatibilidad_video_sdl(int w, int h, int bpp);
12 ;
13 ;
14 ;#endif


En este codigo se almacena el prototipo de la funcion
Código: Seleccionar todo
void compatibilidad_video_sdl(int w, int h, int bpp);

y se usa #ifdef #define y #endif para que la funcion solo se declare una vez en caso de que se ejecutara otra vez el codigo de compatibilidad_video.h?
La utilidad que tiene COMPATIBILIDAD_SDL es simplemente la de poder usar los #defines verdad?
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: #ifndef #ifdef #endif??

Notapor Juanxo » Mié Sep 01, 2010 12:51 am

correcto
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: #ifndef #ifdef #endif??

Notapor migueleitorone » Mié Sep 01, 2010 12:53 am

por fin! pensaba que no lo iba a pillar nunca jajaja
muchas gracias por la ayuda :)
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: #ifndef #ifdef #endif??

Notapor Juanxo » Mié Sep 01, 2010 12:57 am

pa eso estamos
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: #ifndef #ifdef #endif??

Notapor migueleitorone » Mié Sep 01, 2010 4:14 pm

Hola, siguiendo el tutorial me surge otra duda sobre el tema de los encabezados.

-Primero tenemos el fichero "compatibilidad_video.h", que almacena el prototipo de la funcion "compatibilidad_video_sdl":
Código: Seleccionar todo
    1 // Listado: compatibilidad_video.h
    2 ;
    3 ;#ifndef _COMPATIBILIDAD_SDL_
    4 ;#define _COMPATIBILIDAD_SDL_
    5 ;
    6 ;// Precondición: Subsistema de video de SDL activo.
    7 ;// Postcondición: Realiza comprobaciones de compatibilidad de
    8 ;// SDL con varias opciones de inicialización.
    9 ;
    10 ;
    11 ;void compatibilidad_video_sdl(int w, int h, int bpp);
    12 ;
    13 ;
    14 ;#endif


Despues esta este otro "compatibilidad_video.c" que llama a "compatibilidad_video.h" y almacenan las instrucciones de la funcion.

Código: Seleccionar todo
// Listado: compatibilidad_video.c
2 ;// Comprueba la compatibilidad del sistema con los modos de video de libsdl
3 ;// mediante el método ensayo-error
4 ;
5 ;#include <stdio.h>
6 ;#include <SDL/SDL.h>
7 ;#include "compatibilidad_video.h"
8 ;
9 ;
10 ;void compatibilidad_video_sdl(int w, int h, int bpp)
11 ;{
12 ;
13 ; // Nuestro "rectángulo" gráfico con la información de video a mostrar;
14 ;
15 ; SDL_Surface *pantalla;
16 ;
17 ; // Vamos a probar los diferentes parametros de SetVideoMode
18 ;
19 ; // Almacenando la superficie en memoria principal a w x h x bpp
20 ;
21 ; pantalla = SDL_SetVideoMode(w, h, bpp, SDL_SWSURFACE);
22 ; [................]


Por ultimo esta el main.
Código: Seleccionar todo
// Listado: main.c
2 ;//
3 ;// Programa de prueba, compatibilidad
4 ;// del sistema e información SDL video_info
5 ;
6 ;#include <stdio.h>
7 ;#include <SDL/SDL.h>
8 ;#include "compatibilidad_video.h"
9 ;#include "sdl_videoinfo.h"
10 ;

Aqui es donde estan mis dudas,
- por que en el main se llama a "compatibilidad_video.h" y no a "compatibilidad_video.c"?, segun mi logica tendria que ser al reves ya que en el .c se incluye el .h en cambio en el .h no se hace referencia al .c
- es necesario crear un .c para cada .h? No seria mas facil almacenar el prototipo de la funcion y las instrucciones que contiene en el mismo fichero?
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: #ifndef #ifdef #endif??

Notapor adrigm77 » Mié Sep 01, 2010 5:02 pm

Porque existe una cosa llamada Linker antes del compilador que se encarga de buscar donde esta definida esa función, por eso tu solo debes de poner el enlace al .h donde esta definida la función y el linker se encargará de encontrar en que fichero .c se encuentra implementada dicha función.
Razón Artificial - La ciencia y el arte de crear videojuegos.
Avatar de Usuario
adrigm77
 
Mensajes: 43
Registrado: Dom Jul 25, 2010 8:03 pm
Ubicación: Las Palmas de Gran Canaria, España

Re: #ifndef #ifdef #endif??

Notapor Juanxo » Mié Sep 01, 2010 5:21 pm

todo es un tema de productividad del programador y claridad, encapsulacion, etc.

Básicamente, esto te permite ocultar del exterior como están implementadas las cosas, permitiendote modificarlas sin afectar al resto de modulos.
Todos los cpp son independientes. El compilador crea un archivo .o/.obj para cada cpp, y luego los junta al final.

En cuanto a lo de poner todo en el .h, si se puede, y a veces es conveniente, pero el problema es que cada vez que hagas un cambio al .h, tendras que recompilar todos los .cpp y .h donde se incluya, por lo que cada cambio tonto puede suponerte bastante tiempo de compilacion.

Un consejo: olvidate de SDL por ahora. Estás algo verde en C++ aun, y el tema de meter SDL a la mezcla no va a hacer otra cosa sino empeorar la situación, ya que te fijaras más en detalles de SDL y menos en detalles de C++, y te llevará a problemas. Cogete algunos libros y tutoriales ESPECIFICOS de C++ para que te ayuden en la tarea
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: #ifndef #ifdef #endif??

Notapor migueleitorone » Mié Sep 01, 2010 9:24 pm

ya, me estoy dando cuenta de que todavia me falta para ponerme con SDL. No sabeis algun tutorial de c++ enfocado a la programacion de videojuegos en consola, aunque sea en ingles, recuerdo un libro llamado "Invent Your Own Computer Games with Python", algo asi pero para c? o alguno con un poco mas creativo? La verdad es que me desmotivan mucho los ejercicios que suelen tener la mayoria de tutoriales.
buscare algo por google y si no hay mas opcion me pondre con el curso que estaba siguiendo antes de ponerme con SDL.

gracias por la auyda :·D
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: #ifndef #ifdef #endif??

Notapor carlostex » Jue Sep 02, 2010 1:27 am

Para aprender C++ que en tu caso lo nececitas para videojuegos no es necesario tener un tutorial orientado a videojuegos, y dudo que encuentres uno con
un titulo similar, para videojuegos se habla sobre optimización y arquitectura de sofware, pero antes de ver esos temas tienes que saber bien el lenguaje
por lo que te denjo un buen curso en linea http://c.conclase.net/curso/index.php?cap=000#inicio, tiene muchos temas, desde lo mas basico hasta cosas
avanzadas.
Y tambien te servira esto http://www.cplusplus.com/reference/ es una referencia de las bibliotecas oficiales de C++, por lo que incluye STL, que se
usa mucho en videojuegos.
Una vez que sepas c++, ve viendo como trabajar con varios ficheros y como compilarlos, los videjuegos tienden a tener varios archivos, y tendras que entender
como compilarlos todos de forma eficiente, tambien te convendrá aprender a usar make, y para facilitar eso aprender cmake

pero ve por pasos, disfruta aprendiendo por haora, el proceso es largo pero gratificante
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: #ifndef #ifdef #endif??

Notapor migueleitorone » Jue Sep 02, 2010 3:03 pm

Ese es el curso que estoy siguiendo, y es muy completo y bastante facil de comprender, aun asi he pensado en algo; por que seguir el camino mas aburrido pudiendo aprender de una forma mucho mas divertida y motivante? Antes de ponerme a tocar SDL, programe varios jueguecillos en c para la consola de windows, y la verdad es que aprendi mucho mas (con la ayuda del curso que me comentas y algun libro como referencia), y me lo pase muchisimo mejor que haciendo los aburridos ejercicios que tienen la mayoria de cursos.
Asi que, aunque me parezca una idea dificil de llevar a cabo por mi falta de conocimientos voy a intentar hacer una recopilacion de ejercicios interesantes para cada uno de los temas mas importantes de c y c++, para que los que estamos empezando podamos aprender de un modo mucho mas emocionante.
Asi que si alguien se apunta a ayudarme con ideas y soluciones para buenos ejercicios, bienvenido sea.
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: #ifndef #ifdef #endif??

Notapor Juanxo » Jue Sep 02, 2010 3:07 pm

Ese tema ya ha salido alguna vez en el foro, y el problema es que es algo que lleva mucho tiempo, y que tienes que estar muy cualificado para ello (A pesar de que muchos profesores lo hagan, no deberías enseñar algo para lo que no estas cualificado y realmente dominas)

PD: te mande un privado comentandote unas cosillas
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: #ifndef #ifdef #endif??

Notapor migueleitorone » Jue Sep 02, 2010 3:28 pm

Lo del tema de los ejercicios, entiendo que sea complicado, pero valla, poquito a poquito pienso que se podria hacer algo interesante, tampoco digo de hacer un manual completo, solo proponer ejericicios que vallan introduciendo lo que se toque en los temas mas importantes de cualquier curso mas o menos completo (para usarlo como referencia).
Prefiero intentarlo y quedarme en el intento que no intentarlo jeje
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: #ifndef #ifdef #endif??

Notapor endaramiz » Sab Sep 04, 2010 3:14 am

El tutorial de C Con Clase es el mejor que he visto. Pero hay que tener una cosa en cuenta y es que la curva de dificultad es bastante irregular: puede estar explicando algo sencillo y de por medio explicar algo avanzado y que seguramente cuando sea útil ya se habrá olvidado. Por ejemplo, cuando explica los tipos de constantes que hay, se explica una fórmula para calcular un número en distintas bases. Tampoco digo que esté mal saber eso, pero, en mi opinión, complican el tutorial y hace que se haga más pesado. Y alguien que está aprendiendo programación puede perder interés.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

Re: #ifndef #ifdef #endif??

Notapor carlostex » Sab Sep 04, 2010 4:32 am

Yo no le veo tanto problema a lo que comenta endemaris, si no quieres saber eso, pues no lo estudias, aunque creo que todo programador debería saber como
hacer converciones entre bases
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: #ifndef #ifdef #endif??

Notapor migueleitorone » Sab Sep 04, 2010 2:10 pm

Si, es cierto que hay partes del curso que se hacen pesadas de leer por eso. Pero en general es bastante comprensible.

Me he comprado un libro llamado "C/C++" de Miguel Angel Acer Garcia muy facil de leer y de entender, lo explican todo muy claramente y con dibujitos a modo de croquis que lo hacen bastante entretenido.
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron