Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Jomad205

#1
¡Grácias! Sí, ya habia leido esa documentación, bueno de todas formas he seguido indagando y ya lo tengo mas claro.
Segun he entendido el compilador transforma el codigo fuente en codigo ensamblador (.s) que podria ser un archivo de texto y que aun no es binario. Por lo que me han dicho lo normal es que este fichero no lo vea ya que desde este paso hasta el siguiente el fichero llega a traves de pipes (aunque gcc tiene una funcion para poder verlo).
Y a continuación llegamos a la fase de ensamblado, en la que se convierten estos datos en ensamblador en archivos binarios interpretables por el microprocesador, y es cuando se genera el fichero objeto (***.o).

Bueno, para terminar iría la fase de enlazado, pero como esta la comprendía bien, no me explayo más. :)
#2
Bueno, tengo un conflicto de informaciones.
Estaba recopilando apuntes sobre el funcionamiento del proceso de compilacion, y en llegados aquí tengo un problema:


CitarEl compilador es un programa que traduce el código de alto nivel a código binario. Es, por tanto, parecido al ensamblador, pero mucho más complejo, ya que las diferencias entre los lenguajes de alto nivel y el código binario son muy grandes.
El programa escrito en lenguaje de alto nivel se denomina programa fuente o código fuente. El programa traducido a código binario se llama programa objeto o código objeto. Por lo tanto, el compilador se encarga de convertir el programa fuente en un programa objeto.
Una vez que se ha obtenido el programa objeto ya no es necesario volver a realizar la traducción (o compilación), a menos que se haga alguna modificación en el programa fuente, en cuyo caso habría que volver a compilarlo.
El programa objeto, una vez generado, puede ejecutarse en la máquina en la que fue compilado, o en otra de similares características (procesador, sistema operativo, etc.).
Cuando el programa objeto se haya disperso en diferentes archivos (lo que ocurre con frecuencia cuando el programa es grande o, sencillamente, cuando usa funciones escritas por terceras personas), puede ser necesario un proceso previo de enlace de los diferentes módulos. De eso se encarga un programa llamado enlazador o linker, que suele actuar inmediatamente después del compilador.




2.- Ensamblado

Se llaman ensambladores los programas encargados de traducir los programas escritos en ensamblador a código binario.
Fíjese en que tanto el programa traductor como el lenguaje se llaman del mismo modo: ensamblador.Como el lenguaje ensamblador es muy próximo al binario, estos traductores son programas relativamente sencillos.
El ensamblado transforma el programa escrito en lenguaje ensamblador a código objeto, un archivo binario en lenguaje de máquina ejecutable por el procesador.

El caso es que lo que me choca es que lo veo en la documentación que he ido encontrando como 2 pasos independientes que se llevan a cabo uno detras de otro, pero encuentro en unos sitios en los que me dice ' compilador, genera un archivo tipo objeto ) y cuando leo ensamblador , tambien encuentro que genera un archivo tipo objeto (.o) . Pero en otra documentacion de otro sitio distinto leo que el compilador genera un archivo .s (ensamblador) y que en el paso de ensamblado se genera un archivo objeto (.o).

Total que me estoy armando un galimatias en la cabeza de tres pares de narices, y tanto leer lo mismo de formas distintas (o al menos yo lo entiendo de formas distintaS)
Empiezo a comprender menos el proceso... U.u

Ya no se si el compilador genera un archivo binario, si el compilador un objeto... y lo peor de todo ¿No comprendo que diferencia hay entre archivo binario o de tipo ensamblador?
#3
Buenas, de antemano pedire disculpas ya que aun soy un novicio en esto del C y tengo la sensación de que lo que te voy a decir no te servirá para nada.

Leí que en ascii al tener cada caracter una numeracion independiente, la manera de pasar de minusculas a mayusculas era restandole 32 , y viceversa.

Por ejemplo:

main()
{
int c;
while((c=getchar()) !=EOF)
{
if(c>='a' && c<='z') c-=32;
putchar(c);
}
}


/* Eso debería cambiarte los caracteres que introduzcas y sean minúsculas , exclusivamente las minúsculas, a letras mayúsculas */  Bueno , si no te sirve de nada lo lamento ya que aun no estoy al nivel de la mayoría de lo que por aquí se habla.

¡Un saludo!
#4
Ajá! Creo que ahora lo comprendo mejor, te lo agradezco :) Trataré de buscar algo más de información al respecto :) Gracias!!
#5
Hola, muy buenos dias a todos:
Pues bien, escribo este tema porque no entiendo bien el uso del while con la funcion getchar para proceder a la limpieza del buffer.  Es mas no estoy seguro de comprender bien cual es el objetivo de la limpieza del buffer.

Entiendo por buffer, un espacio reservado en la memoria (volatil) para una determinada información del programa. Supongo que si no se limpiase quedarían restos que no nos beneficiarian a lo largo de un programa. Como he dicho hace un momento 'supongo'.

He encontrado en este mismo foro una mención al tema, pero o bien creo que no se llego a resolver lo que se preguntaba o yo no lo he entendido.
http://foro.elhacker.net/programacion_cc/iquestpara_que_sirve_la_funcion_getchar-t200224.0.html

En la documentación que tengo , hay varios ejemplos, voy a poner nada mas que 2 porque no me gustaría saturar el mensaje con información innecesaria:

#include <stdio.h>

main(void)
{
char letra='0',c;

while (!(letra >= 'a' && letra <=  'z' || letra >= 'A' && letra <=  'Z'))
{
printf("\nEste programa únicamente admite letras\n");
printf("Introduce una letra: ");
scanf("%c", &letra);
while((c=getchar())!= '\n');
printf("\n\n\n");
}
printf("¡Por fin UNA LETRA!");
printf("\n\nLa letra introducida ha sido: %c", letra);
printf("\n\n\n\n");
}

Que dice así :

/*La condición de while puede referirse a caracteres. Por ejemplo, programa que pide una letra
mientras el carácter que introduzcamos sea diferente de una letra. La instrucción while((c=getchar())!= '\n'),
sirve para borrar el buffer (comentando esa línea e introduciendo caracteres que no sean letras al ejecutar
el programa, se puede comprobar la necesidad de borrar el buffer) y es otro ejemplo del uso de while*/


#include <stdio.h>

main()
{
char entrar;
int nc=0;

printf("Introducir caracteres. Pulsar ctrl+D para terminar: ");
while (entrar != EOF)
{
entrar = getchar();
if (entrar != '\n') nc++;
}
printf("\nEl numero de caracteres es: %d\n",nc);
}


Y este otro seria un ejemplo de un programa que para darse por finalizado habría que pulsar CNTRL+Z (EOF) en windows o CNTRL+D en linux. Lo que haría sería contar cada uno de los caracteres que introducimos, pero no contaría los ENTER.

Debo decir que hasta ahora no habóa visto la función getchar, con lo que es desconocida para mi.

Y aquí termino, lamento si me he extendido demasiado. ¡Gracias de antemano!

EDITO: Tambien entra a la mitad de todo esto en utilizar fgets() y sscanf() para evitarnos borrar el buffer, pero como es suficiente de momento el lío que tengo respecto a esto, me parecía rizar el rizo añadirlo.
#6
Hola, muy buenas:
Recientemente he comprado un ordenador portatil nuevo que viene con 2 particiones (ademas de otra de rescate). La particion del sistema de windows (C:) y otra de datos (D:) el caso es que queria formatear la unidad D: para poder dividirla en 2 particiones  y dedicar una parte para linux y la otra mantenerla para aplicaciones de windows.
El caso es que me he encontrado con 2 directorios dentro de la partición y no tengo la menor idea de que hacer con ellos:
Esta es la raíz del disco D:


Este el contenido de Crystalreportviewers12


Y este el del otro directorio numérico:


¿Que hago yo con esto? Gracias de antemano.

EDITADO, HE MODIFICADO LA URL DE LAS IMAGENES, NO SE VEIAN.