Foros del Web » Programación para mayores de 30 ;) » C/C++ »

compilacion en c

Estas en el tema de compilacion en c en el foro de C/C++ en Foros del Web. hola , estoy empezando a aprender c y mi primer problema es que no tengo claro como compilar estoy en sistema linux, intento usar geany ...
  #1 (permalink)  
Antiguo 27/03/2013, 14:11
Avatar de carlwdctz  
Fecha de Ingreso: octubre-2009
Mensajes: 112
Antigüedad: 14 años, 5 meses
Puntos: 2
compilacion en c

hola , estoy empezando a aprender c y mi primer problema es que no tengo claro como compilar
estoy en sistema linux, intento usar geany
pero necesitaria que alguien me explicara de manera sencilla los pasos uno por uno que debo dar porque hasta el momento no me sale nada
es decir querria saber que debo hacer para poner unas lineas de programación en c y como se compila y se llega a ejecutar el archivo
ayuda, estoy bastante perdido ¡¡¡
__________________
toi a la tarea
  #2 (permalink)  
Antiguo 27/03/2013, 15:18
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: compilacion en c

Voy a suponer que estás en Debian/Ubuntu. Introduce los siguientes comandos en la terminal:
Cita:
sudo apt-get install gcc
sudo apt-get install g++
Ya tienes los compiladores instalados, puedes compilar desde la terminal o usar un IDE que te sirva de interfaz gráfica. Para Geany:
http://www.youtube.com/watch?feature...&v=RUo2Sk-As3o

Aunque yo personalmente recomiendo CodeBlocks, me parece mucho más avanzado y completo.
  #3 (permalink)  
Antiguo 27/03/2013, 19:28
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: compilacion en c

Compilar se compila usando un compilador Xd. Por ejemplo, puedes usar Visual Studio si estás en Windows (y te gusta el entorno), GCC o G++. Hay otros compiladores.

El compilador acepta una entrada, lee el path, los parámetros de ajustes de la compilación; linkea todos los archivos requeridos en uno sólo, analiza la sintaxis, las variables, el scope y demás del fichero; preprocesa las directivas de preprocesador si las hubiera volcándolas (y sobreescribiendo) al archivo y a continuación va traduciendo línea por línea a su equivalente en ensamblador. El equivalente dependerá de la plataforma en que lo compiles o más bien, la plataforma que especifiques. Luego, con el código, crea un objeto ejecutable y lo embebe, embebiendo también las variables en él mismo.

El equivalente en ensamblador es una forma para que lo entiendas, en realidad son instrucciones en hexadecimal, que en realidad son 0 y 1 que la CPU lee como máscaras de bits.

Te pondré una línea de ejemplo para que lo entiendas (no me apetece tampoco trabajar mucho )

Código C++:
Ver original
  1. int d = 3; // int suponiendo 4 bytes
  2. d++;

Código Ensamblador:
Ver original
  1. mov eax, 3
  2. dword ptr [d],eax
  3. add eax, 1

Buscamos en la siguiente referencia el equivalente en hexadecimal de esas 3 instrucciones en ensamblador de Intel que equivalen a las instrucciones en C++.
  • En primer lugar, en la primera instrucción vemos que el dato introducido se moverá a un registro de 4 bytes (32 bits). Eso significa que la solución más fácil es interpretar ese valor como un valor de 4 bytes (0x00000003). La instrucción sería MOV r16/32/64 imm16/32/64, y el equivalente B8+r donde r es el código de registro, en este caso, eax, que corresponde al 000. imm representa un valor inmediato. En lugar de coger el valor de una dirección de memoria el valor se lee directamente junto a la instrucción, en el mismo flujo, vamos que va tras la instrucción.

    La máscara de bits de B8 es

    Cita:
    10111000
    donde sólo los últimos bits representan el registro, como es 000, no se altera nada, queda igual. Ergo, la instrucción es B8, y el siguiente byte representa el valor mismo, por 4 bytes.

    Código ensamblador:
    Ver original
    1. B8 03 00 00 00
  • Lo segundo mueve el valor de eax (ya introducido a una dirección de memoria). Todos los punteros se sustituyen por la dirección a la que representan. Supongamos que [d] es 0x4562b103.

    La instrucción sería MOV r/m16/32/64 r16/32/64 donde r es el registro y r/m la memoria o el registro. El código de operación es 89.

    Dado que no hay máscara de bits, se aplican las reglas de modo de escritura y redirección de memoria extendida del procesador.

    Como será de registro EAX a una dirección directamente en memoria (dispuesta), se usa el 05. A continuación del 05 se indica la dirección de memoria dispuesta. 89 05 03 b1 62 45.
  • Lo último es incrementar eax.

    Se usará add. En concreto, ADD rAX imm16/32. rAX representa cualquier registro pero implícitamente EAX e imm el valor inmediato (como en el punto 1), de nuevo mirando las reglas de modo de escritura. El código de operación es 05. El código de redirección es ninguno ya que como usaremos EAX y es implícito, y a continuación el valor inmediato, de 32 bits, que es 1. 05 01 00 00 00

Ahora pasamos todo eso a binario.

Código Binario:
Ver original
  1. 10111000 00000011 00000000 00000000 00000000 10001001 00000101 00000011 10110001 01100010 01000101 00000101 00000001 00000000 00000000 00000000

Y listo. Ya somos compiladores humanos. Ahora falta embeberlo en un objeto. Pero eso ya ni idea de cómo es, tendré que ponerme a aprender.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Última edición por dontexplain; 28/03/2013 a las 01:37
  #4 (permalink)  
Antiguo 28/03/2013, 14:41
Avatar de albertcdh  
Fecha de Ingreso: marzo-2013
Mensajes: 4
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: compilacion en c


Última edición por albertcdh; 28/03/2013 a las 14:45 Razón: eliminar

Etiquetas: compilacion, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:48.