« first day (1969 days earlier)      last day (1437 days later) » 

00:30
0
Q: Tengo una duda sobre trabajo para bachilleres

Joel SanchezTengo una duda y quisiera partir desde mi perfil. Soy un estudiante de secundaria en bolivia, en dos años salgo bachiller (diciembre de 2022, fin de mis estudios) Tengo conocimientos basicos de programacion estructurada en C++ (hasta funciones) y pienso aprender desarrollo web (html, css, javascr...

00:59
Buenas
Tengo una duda seguramente muy básica de Linux
Tengo una libreria creada por mi y quiero compilarla, pero no termino de compilar bien el header (.h)
Tengo la implementación libreria.c y el libreria.h
Para compilar libreria.c he usado gcc libreria.c -o libreria y de igual forma para el header, pero no compila
01:17
De igual modo tengo un fuente que hace de main que implementa test para la librería, pero si lo compilo de la misma forma me lanza un error indicando que existe una referencia a un método sin definir, cuando si lo está
 
3 hours later…
04:45
@Oscar Los headers no se compilan. ¿ Donde has visto tu que se compile uno ?
 
4 hours later…
 
2 hours later…
10:30
@Oscar Cuando escribes una librería separas el código a compilar en un .c de lo que son puramente declaraciones (el .h). En el programa que vaya a usar la librería debes poner un #include "libreria.h" para que ese código tenga acceso a la declaración de las funciones, aunque no a su implementación
Luego debes comparar por separado cada uno de los .c, el del código principal y el de la librería, usando la opción -c. Esa opción le dice al compilador que sólo ha de generar los objetos (código máquina) y no el ejecutable. La opción -o que has intentado es para generar un ejecutable, pero no puedes hacer eso con un código que está incompleto (a libreria.c le falta la función main() y al programa principal le falta la implementación de lo que está en la librería)
Por tanto debes hacer gcc -c libreria.c y gcc -c programa_principal.c
Eso crerará un par de ficheros de extensión .o que contienen la conversión a código máquina de lo que habia en los .c. Ahora sí, ya puedes juntar ambos .o en un único ejecutable invocando al linker (que es también gcc en este caso). Pondrías gcc -o nombre_del_ejecutable programa_principal.o libreria.o
en este caso se le pasa a gcc los .o en vez de los .c. Por tanto gcc ya no compila nada (los .o ya están compilados). Lo que hace gcc es invocar al linker, que es el encargado de crear el ejecutable que usa código resultado de juntar los .o
antes dije "Luego debes comparar por separado..." y quería decir "Luego debes compilar por separado..."
 
5 hours later…
16:05
Gracias @abulafia. Todo claro😀
Tenía una última duda. He visto que cuando se trabaja con cadenas de texto en C hacen lo siguiente: while (*dest++ = *src++) donde dest y src son punteros a char.
No termino de entender el porque del ++
Es un post-incremento. Luego de usar los valores de dest y src, se incrementan en uno, por lo que quedan apuntando al siguiente elemento.
16:33
No termino de encontrarle el sentido. Si bien para un contador hacemos contador++ para incrementar, ¿porque hacemos esto con un puntero a char?
17:20
@Oscar Están pasando muchas cosas en esa simple línea. Vamos parte por parte.
Primero *src accede a la dirección de memoria a la que apunta src y obtiene de ahi un byte (un char). Eso es asignado a *dst, es decir, a la dirección de memoria a la que apunta dst. Por tanto se ha copiado un byte de una dirección de memoria a otra
Además, debido al ++ se han incrementado (después de ser usados) ambos punteros. Cada uno de ellos apunta ahora a la dirección de memoria siguiente a la que apuntaban previamente
Y además, el byte que ha sido copiado de una dirección a otra es el resultado de toda esa expresión entre paréntesis, que es el valor que usa while () para decidir si ejecutar esa expresión otra vez
si ese byte era distinto de cero, será para while el equivalente a un True, y repetirá el bucle. Si en cambio el byte copiado era cero, para while será False y no se ejecutará más.
por tanto se están copiando bytes de una dirección a otra, y se incrementan las direcciones, hasta que el byte copiado sea cero
en definitiva ¡se está copiando una cadena completa de una dirección a otra, incluyendo el carácter nulo (byte 0) que marca el fin de la cadena!
Si la cadena original comenzaba en la dirección, digamos por ejemplo 0x1000 y ocupaba 4 letras más el terminador, src comenzaría con ese valor 0x1000. Y digamos que dst apuntaba a 0x2000. Entonces se irán copiando bytes desde 0x1000, 0x1001, 0x1002, ... hacia 0x2000, 0x2001, 0x2002, etc..
hasta encontrar el cero terminador, cosa que ocurrirá cuando se copie de 0x1005 hacia 0x2005 momento en que termina el bucle
observa que esta técnica, aunque simple y elegante, está modificando src y dst que al terminar no apuntarán ya a donde comenzaban las cadenas, sino a donde terminan.
es más común copiar cadenas usando strcpy(dst, src) que hace en el fondo lo mismo, pero no perdemos los valores originales de los punteros
 
4 hours later…
21:38
Estaba haciendo una respuesta y tenía este molesto aviso puesto en mi cuadro de texto.
Esto aparece en cuanto se hace una pregunta?
No me quejo, y las imagenes no eran código
Pero si incluso con esto hay gente que pone código en forma de imagen la verdad me sorprende :o
y que no te sorprenda...
y muchisimas veces escuche que es mas facil subir una imagen que copiar y pegar...
Eso es más por vagués para mi, por que es un muy ligero esfuerzo extra por tu propio bien, ya que la calidad de tu pregunta es mayor y te ayudan mejor.
Ridiculo
22:00
@DanteS. es que es mentira.. es mas facil copiar y pegar...
22:11
@DanteS. viste esto?
14
A: Un fragmento de código vale más que mil imágenes... ¿cómo sensibilizar a los usuarios de ese principio?

gbianchiCuando haces preguntas o cuando las contestas, por favor no uses capturas de pantalla del texto. Esto es una mala idea porque: No se puede copiar tu código en las respuestas, o en las búsquedas de Google, o en una solución para comprobarlo o donde sea. No salen en las búsquedas. La publicación e...

@gbianchi lo acabo de ver, esa respuesta es muy útil. Habría que redireccionarles a esa pregunta a los que suben imágenes con código.
@DanteS. yo lo hago
Y haces bien!
Por favor, no uses imágenes salvo que sea absolutamente necesario. Mira por favor aca. Los errores y tu codigo deben ir como texto, siempre.
Es un buen mensaje
22:33
@anythingg aprobaste una edicion a una pregunta en ingles?????
 
1 hour later…
23:45
@gbianchi no creo que eso haya pasado, aver??
@gbianchi ya lo ví y sí la aprobé, pero no estaban traduciendo la pregunta, solo añadiéndole "formato", supongo que por eso la aprobé

« first day (1969 days earlier)      last day (1437 days later) »