Ayuda básica para iniciar en C (Ansi C)

Iniciado por pacobsas, 9 Mayo 2016, 21:48 PM

0 Miembros y 1 Visitante están viendo este tema.

pacobsas

Hola amigos,
soy nuevo en el foro y deseo programar en C. Para eso tengo una serie de dudas iniciales que comparto para ver si alguien me puede asesorar.

1) No tengo nada instalado aún. Por lo que la primera pregunta es: ¿qué compilador C (ansi C, no C++) me recomiendan instalar?. La idea es producir programas independientes del SO (sea Windows, Lunix, etc). El compilador se instalaría en mi laptop (portátil) que corre Windows. He leído por ahí, que uno de los mejores (si no el mejor) sería GCC, ¿es así?

2) Por ahora, no instalaría un IDE hasta estar más familiarizado con el lenguaje, considerando que haría cosas sencillas para aprender. Creo que podría usar el Notepad, y grabar ficheros con extensión C, ¿correcto?

3) Si la recomendación del punto 1 es el GCC, les cuento que estuve mirando la página https://gcc.gnu.org/ y estoy algo perdido en donde pinchar para descargar el compilador C (no el C++). Veo una solapa Download, y bajo ella Mirrors y Binaris, y no sé por donde empezar.

Hasta aquí las primeras dudas. Muchas gracias por adelantado si alguien me ayuda.
Sdos
Paco

AlbertoBSD

Eres de los mios!!

Puedes instalar Dev-C++ y usar el GCC que viene ahi directamente desde el cmd, asi evitas el ide que tiene.

compilarias:

gcc archivo.c -o archivo.exe

Adionalmente instalate el notepad++ para que te resalte el codigo fuente.

saludos.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

class_OpenGL

Yo creo que no quiere usar un IDE no solo por que este compila solo el programa, sino también por la auto-ayuda y el gestor de ficheros (vamos, creo yo). Si bien el Notepad++ también incluye su (minimalista) sistema de auto-ayuda, puedes desactivarlo fácilmente. Además, este IDE es compatible con diferentes idiomas, así que es mejor acostumbrarse a este que a Dev-C++ (el cual está un poco anticuado, si no tengo mal entendido).

Respecto a lo del compilador, si te descargas MinGW (exclusivo de Windows), puedes usar el comando 'gcc'. Este comando permite compilar en ANSI C (pero si le das los parámetros correctos también en C++, pero si no pones los dichos parámetros, solo compilarás los programas C. No te tienes que preocupar por salirte del ANSI C).

También quiero aclarar una cosilla por si hay algún tipo de malinterpretación. Un programa ya compilado en C nunca será compatible con todos los sistemas operativos. Lo que es portable es el código. Me explico, cuando hayas elaborado tu programa, si quieres que sea compatible para otros sistemas operativos, tendrás que bajarte un compilador para cada sistema operativo que quieras y entonces compilas el programa para cada sistema operativo.

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

AlbertoBSD

 :laugh: :laugh: :laugh: Si creo que el Dev-C++ es como de hace 10 años o algo asi, yo me referi a ese por que te instala una version del MinGW que en el POST anterior no me acordaba del nombre.

Yo en lo personal no uso IDEs por que siento que se hacen flojo para programar, las pocas veces que los use fue durante concursos de programación donde ahórrate el escribir completamente una linea de código podría ser la diferencia entre entregar primero el código o no entregarlo primero.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

class_OpenGL

#4
TEORÍA (un poco aburrida, pero te hará comprender mejor el proceso de la compilación):

Este es el procedimiento por el cual pasa un programa en C normalmente (a grandes rasgos):


  • Se aplican las directivas de preprocesador. Si no sabes lo que son, ya lo descubrirás)
  • Se traducen los archivos .c a un "lenguaje" llamado ensamblador (ASM). Este paso normalmente no depende de ti, solo lo menciono por teoría.
  • Ahora se generan los llamados ficheros objeto. Estos ficheros son códigos CASI ejecutables, pero no están enlazados1 con las dependencias del sistema operativo.
  • Ahora se enlazan todos los ficheros objeto que has generado mas las librerías que estés usando (que puede que no uses ninguna) más las dependencias del sistema operativo.

1 Enlazar es "mezclar" todo el código ejecutable en un solo fichero ejecutable. Los ficheros ejecutables son los que puedes ejecutar (es decir, puedes abrirlos, como si abres un juego o algo)


______________________________________
CONSEJOS PARA USAR EL COMANDO gcc

Aquí unos parámetros básicos sobre el comando gcc (el cual es prácticamente el mismo tanto en Windows (si usas como compilador el MinGW) como en sistemas Linux (Si usas el compilador GNU-GCC):

-Wall    Este parámetro hace que a la hora de compilar te muestre advertencias. Las advertencias no son errores, pero son posibles errores, así que es mejor tenerlas en cuenta.

-o    Este parámetro establece el nombre del fichero de salida (por ejemplo, el nombre de tu programa ejecutable)

-c    Este parámetro hace que el enlazador no se active, así que lo que creas no es un ejecutable, sino un fichero objeto. Los ficheros objetos son un gran recurso para cuando tienes muchos archivos .c.

Lo que normalmente un IDE hace es generar los ficheros objeto para cada archivo .c (donde está el código). Si después vuelves a compilar y no has modificado algunos ficheros .c, sus ficheros objeto no se recompilarán, ahorrándonos tiempo de compilación :D

NOTA: Cuando compiles, siempre pon primero tu archivo main.c (donde está la función main) y luego el resto de ficheros de código o ficheros objeto.

Ejemplo de uso del comando con todos los parámetros que te he dado:
gcc -Wall -c -o Programa.o main.c

Este comando te genera un fichero objeto llamado Programa.o a partir del archivo  main.c

gcc -Wall -o juego.exe main.c

Este comando te genera un archivo ejecutable llamado juego .exe a partir del archivo main.c

gcc -Wall -o word.exe main.c word.o gui.c

Este comando te genera un ejecutable llamado 'word.exe' a partir del archivo main.c, word.o y gui.c. Como ves, puedes poner tanto ficheros objeto (word.o) como archivos de código fuente (gui.c).

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

pacobsas

Gracias AlbertoBSD y class_OpenGL, han sido de gran ayuda.
Hay cosas que ya sabía, otras que no, y otras me sirvieron para confirmar lo que presuponía. Por las respuestas, deduzco lo siguiente (si hay algo erróneo, por favor, detallarlo así corrijo):

1) El compilador a instalar sería el GCC (de GNU), descargando el MinGW (que ya descargué), compilando por lotes con comando "gcc" y sus múltiples parámetros, entre ellos algunos que controlan que el código fuente se ajuste a ANSI C para garantizar compatibilidad.

2) Cuando me refería a desarrollar independientemente del SO, me refería a generar código fuente compilable en diferentes SO, sin hacer ningún (o casi ningún) ajuste a los fuentes. Claro que habrá que recompilar para cada SO, con su respectivo compilador (que podrá ser el mismo GCC), pero dependiente de SO. Entonces, el ANSI C (o simplemente C) sería el lenguaje a escoger para generar código fuente no dependiente de SO, ¿correcto?

3) Cuando me refería a no usar IDE, me refería a no usar complejos sistemas de organización (entornos integrados) como podría ser el Eclipse, Visual Estudio, etc. etc. Claro que no me resisto a usar un editor como el Notepad++ (que no sabía que existía y que veo que también es de GNU). Una cosa sería un IDE completo, y otra distinta un simple Editor, con sus funcionalidades, ¿correcto?.

Resumiendo:
Usar ANSI C, instalar MinGW (compilador GCC), instalar Notepad++ para editar fuentes, y luego veremos más adelante.

Otra vez muchas gracias.
Un saludo,
Paco.