0

Estoy haciendo el curso CS50x de Harvard. Mi SO es Windows 10, y estoy tratando de seguir los ejemplos básicos del profesor. Ya tengo instalado el MingGW para compilar en VSCode, y he añadido los archivos "cs50.h" y "cs50.c" a la carpeta "C:\MinGW\include". Mi código es el siguiente:

#include <stdio.h>
#include <cs50.h>

int main (void)
{
    string answer = get_string("What's your name? ");
    printf("hello, %s.\n", answer);

    return 0;
}

y obtengo el siguiente error al intentar compilar el archivo en "hello.c":

Iniciando la compilación...
C:/MinGW/bin/gcc.exe -fdiagnostics-color=always -g "C:\Users\la nueva estancia\dev\Harvard CS50x\hello.c" -o "C:\Users\la nueva estancia\dev\Harvard CS50x\hello.exe" -Wall -Wextra -Wpedantic
c:/mingw/bin/../lib/gcc
/mingw32/9.2.0/../..
/..
/../mingw32/bin/ld.exe: C:\Users\LANUEV~1\AppData\Local\Temp\ccU7QnSG.o: in function `main':
C:/Users/la nueva estancia/dev/Harvard CS50x/hello.c:6: undefined reference to `get_string
'
collect2.exe: error: ld returned 1 exit status

La compilación ha finalizado con errores.

Nota: He logrado resolver parcialmente el problema, colocando el archivo "cs50.c" en la carpeta del archivo "hello.c" y ejecutando el siguiente comando (juntando los 2 archivos):

gcc -o hello hello.c cs50.c

Buscando en internet encontré esa solución pero no me parece una solución "definitiva" y agradecería cualquier otra solución ya que no me gustaría tener que escribir ese comando cada vez que desee compilar un archivo. Desde ya muchas gracias!

EDICIÓN: Cuando intento incluir el archivo "cs50.c" en el inicio de código de esta manera:

#include <stdio.h>
#include <cs50.h>
#include "cs50.c"

Me sale el siguiente error:

Iniciando la compilación...
C:/MinGW/bin/gcc.exe -fdiagnostics-color=always -g "C:\Users\la nueva estancia\dev\Harvard CS50x\hello.c" -o "C:\Users\la nueva estancia\dev\Harvard CS50x\hello.exe" -Wall -Wextra -Wpedantic
C:\Users\la nueva estancia\dev\Harvard CS50x\hello.c: In function 'main':

C:\Users\la nueva estancia\dev\Harvard CS50x\hello.c:7:32: warning: passing argument 1 of 'get_string' from incompatible pointer type [-Wincompatible-pointer-types]
    7 |     string answer = get_string("What's your name? ");
      |                                ^~~~~~~~~~~~~~~~~~~~
      |                                |
      |                                char *

In file included from C:\Users\la nueva estancia\dev\Harvard CS50x\hello.c:3:
C:\Users\la nueva estancia\dev\Harvard CS50x\cs50.c:78:28: note: expected 'char **' but argument is of type 'char *'
   78 | string get_string(va_list *args, const char *format, ...)
      |                   ~~~~~~~~~^~~~

C:\Users\la nueva estancia\dev\Harvard CS50x\hello.c:7:21: error: too few arguments to function 'get_string'
    7 |     string answer = get_string("What's your name? ");
      |                     ^~~~~~~~~~

In file included from C:\Users\la nueva estancia\dev\Harvard CS50x\hello.c:2:
c:\mingw\include\cs50.h:108:8: note: declared here
  108 | string get_string(va_list *args, const char *format, ...) __attribute__((format(printf, 2, 3)));
      |        ^~~~~~~~~~

La compilación ha finalizado con errores.
Christian
  • 9,428
  • 6
  • 13
  • 34
  • La carpeta `include` está pensada para tener los archivos `.h` y la `lib` las bibliotecas externas. Cuando compilas debes indicar esas carpetas y cada archivo .c y .cpp a compilar. – Mateo Apr 12 '22 at 14:33
  • @Mateo gracias por responder... El VSCode lee correctamente el archivo cs50.h de la carpeta inlcude del MinGW. El problema esta cuando intento compilar el archivo solo.. me sale ese error y solo puedo compilarlo cuando lo "combino"(no conozco la terminologia precisa) con el archivo cs50.c con el commando ```gcc -o hello hello.c cs50c``` – Facundo Zavaleta Apr 12 '22 at 14:47
  • Tampoco entiendo porque me tildaron la pregunta como duplicada... me reenvian a otra pregunta que no tiene nada que ver con lo que yo pregunte – Facundo Zavaleta Apr 12 '22 at 14:48
  • Por alguna razón consideraron que la pregunta está duplicada. [Si te parece que están equivocados, solicita su reapertura](/help/reopen-questions). En cuánto a por qué no funciona, no estás indicando las carpetas en las que buscar los .h . El comando correcto sería `gcc -IC:\MinGW\include -o hello hello.c cs50.c`. [Información](https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/Directory-Options.html#Directory-Options) – Mateo Apr 12 '22 at 15:08
  • @Mateo Te aviso nuevamente que los archivos colocados en la carpeta C:\MinGW\include SI SON LEIDOS por el VSCode. Lo que quiero saber es si existe alguna forma de compilar el archivo sin tener que estar combinandolo con el otro archivo "cs50.c" cada vez que quiero compilarlo. El archivo "cs50.h" si es correctamente leído por el editor. – Facundo Zavaleta Apr 12 '22 at 15:14
  • Ah. Bueno, igual te sirve por si quieres ubicar los archivos en otro lugar. No, no hay forma de compilar sin combinarlo. Así es como funciona el tener el código en varios archivos. Debes combinarlos. Una alternativa un tanto cuestionable es que en lugar de incluir el .h, incluyas el .c: `#include "cs50.c"`. De ese modo el contenido de `cs50.c` se copia al archivo `hello.c`y no necesitas compilar los dos por separado. – Mateo Apr 12 '22 at 15:21
  • @Mateo ya lo intente y ahora el problema es otro, voy a intentar editar la pregunta para añadirlo. Gracias por responder – Facundo Zavaleta Apr 12 '22 at 15:36
  • El error te dice que estás usando mal la función `get_string`. Específicamente no estás pasando bien los parámetros. – Mateo Apr 12 '22 at 16:14
  • @Mateo si pero no veo el error en cuestión. En la versión online del VSC este problema no ocurre, funciona perfectamente – Facundo Zavaleta Apr 12 '22 at 16:31

0 Answers0