El GNU cc (conocido como gcc) es el conjunto de programas que comprenden el compilador de este proyecto.

Compila programas escritos en lenguaje C, C++, o C dirigido a objetos. Cabe mencionar que también compila FORTRAN (claro, con apoyo de g77).

¿Qué es gcc?

¿Cómo invocamos a gcc?
Para invocar a gcc, sólo tenemos que hacer desde la línea de comandos lo siguiente:

$> gcc nombre_de_código
Entonces, si gcc no detecta problemas en nuestro código, hará: preprocesado, compilación, ensamblaje, y vinculación creando un archivo binario llamado a.out Pero yo recomiendo que la manera más usual de invocar a gcc es la que nos permite nombrar a nuestro binario con el nombre que nosotros queramos. Ejemplo:

$> gcc nombre_de_código -o nombre_de_binario_que_tu_quieras

Ejemplo
Los sistemas LINUX/UNIX son entornos de programación muy amigables, no es posible describir con exactitud porque, tal vez se deba al hecho de que estos sistemas están construidos con el lenguaje C (C fue diseñado para el sistema operativo UNIX). Bien, para escribir código C, basta con tomar nuestro editor de textos, crear el archivo y guardarlo con extensión c
# include<stdio.h> main() { int entero1, entero2, operacion; printf("primer numero\n"); scanf("%d", &entero1); printf("segundo numero\n"); scanf("%d", &entero2); operacion=entero1 + entero2; printf("la suma es %d\n", operacion); operacion=entero1 - entero2; printf("la resta es %d\n", operacion); operacion=entero1 / entero2; printf("la división es %d\n", operacion); operacion=entero1 * entero2; printf("la multiplicación operacion); return 0; } es %d\n",

Guardamos este código con el nombre operando.c y compilamos: $>gcc operando.c -o operando Para Correr (o ejecutar) el programa, basta con hacer: $> ./mensaje

¿Cómo controlo a gcc, es decir, de que opciones y argumentos dispongo?
Como se observa este documento no pretende, en absoluto, ser un manual de gcc, al menos no en toda la extensión de la palabra, por ello, sólo se presentan las opciones de línea de comando más comunes que acepta gcc.
Opción -o nombre de archivo -c -Dmacro=bar -Iruta_a_directorio -llibrería -Lruta_a_directorio -static -g -ggdb -E -x -O -On -ansi -pedantic -pedantic-errors -traditional -W -Wall -werror -v Propósito Para dar nombre al archivo de salida, si no se especifica el nombre de este archivo, gcc lo llama a.out Compilar sin linkear Define un macro de preprocesador macro con un valor bar en la línea de comandos Esta opción pone la ruta de acceso al directorio ruta_a_directorio al comienzo de la lista de directorios en los que gcc busca archivos a incluir por la presencia de directivas #include Linkea la biblioteca librería. El Linker busca una lista estándar de directorios para la biblioteca , la cuál es actualmente llamada liblibrería.a Agrega el directorio ruta_a_directorio a la lista de directorios en que gcc busca los archivos de biblioteca Linkea bibliotecas estáticas Incluye en el archivo binario informació estándar de depuración. Para incluir mucha información para depuración en el binario, información sólo interpretable por el depurador gdb de GNU Mediante esta opción le decimos a gcc que detenga el proceso de compilación luego del preprocesado Para inidicar a gcc que comience la compilación a cierta altura, muchas veces a partir del código fuente preprocesado; mediante cpp-output Para optimizar el código compilado Especifica un nivel de optimización, 0<=n<=3 Para que el modo de el compilador sea el ANSI/ISO C, esto para no permitir extensiones GNU que generen conflictos con estos estándares Lo que hace es mostrar las advertencias necesarias para el ANSI/ISO C Para mostrar todos los errores que requiere el ANSI/ISO C estándar Para el C tradicional, el de Kernigham y Ritchie Con esta opción lo que se consigue es suprimir todos los mensajes de advertencia Es para mostrar todas las advertencias aplicables que da gcc Las advertencias las convierte en errores, deteniendo así el proceso de compilación Con esta opción se muestran todos los comandos utilizados en cada etapa del proceso de compilación

Un breve comentario sobre algunas de las opciones de gcc. Si se dispone de archivos de biblioteca o de inclusión situados en ubicaciones no estándar, las opciones -lbiblioteca, -Lruta_a_directorio y -Iruta_a_directorio lo que hacen en si es permitirnos especificar tales ubicaciones, para que el compilador las busque, por ejemplo, supóngase que hicimos un programa que utiliza las ncurses, digamos curses1.c, entonces, esto se compilaría de la siguiente manera: Ikki:/home/javv>gcc curses1.c -o curses1 -lcurses O que tal un programa que utilice las Xlib, llamado X1.c, lo compilaríamos así: Ikki:/home/javv>gcc X1.c -o X1 -lX11 -L/usr/X11R6/include O más aún, que nuestros archivos de inclusión habituales los almacenamos en /usr/home/javv/mis_include, entonces gcc las encontrará mediante: Ikki:/home/javv>gcc miarchivo.c -o miarchivo -I/usr/home/javv/mis_include En fin, así se podrían hacer más y más cosas.

Cambiando un poco de tema, surge una pregunta: ¿Cómo es que gcc procesa los archivos?, bien, lo que hace gcc es basarse en las extensiones de estos; la siguiente tabla muestra las extensiones más comunes:
Extensión .c .C, .cc .i .ii .S, .s .o .a, .so Tipo de archivo Código fuente de lenguaje C Código fuente de lenguaje C++ Código fuente de C preprocesado Código fuente de C++ preprocesado Código fuente de lenguaje ensamblador Código objeto compilado Código de biblioteca compilado

A manera de apéndice
La compilación de un programa consiste en varias etapas, y que por lo general nosotros no observamos, pues gcc las lleva a cabo de manera encubierta, por decirlo de algún modo, así que veamos el proceso de compilación paso a paso, para ello nos auxiliaremos con el código de mensaje.c; básicamente lo que hace gcc es correr mensaje.c sobre el preprocesador , cpp, para expandir cualquier macro que pudiese haber e insertar también los contenidos de los archivos que incluimos mediante #include; la segunda etapa es compilar el código fuente prepocesado, para convertirlo en código objeto; por último y con ayuda de ld, llamado linker, crea el binario llamado mensaje. Hagamos todo esto manualmente: 1.- para preprocesar mensaje.c: Ikki:/home/javv>gcc -E mensaje.c -o mensaje.cpp 2.- Hagamos la conversión de mensaje.cpp en código objeto. Ikki:/home/javv>gcc -x cpp-output -c mensaje.cpp -o mensaje.o 3.- Ahora creemos el binario Ikki:/home/javv>gcc mensaje.o -o mensaje Lo anterior tiene utilidad si por ejemplo se presentan problemas entre algunos de los archivos incluidos mediante #include y nuestro código fuente, así mediante la compilación paso a paso es más fácil detectar que archivos son lo que producen conflicto. Para ilustrarlo, basta con que tomemos un editor de texto, y veamos el contenido del archivo mensaje.cpp.

Despedida
Bueno, ojalá este pequeño manual introductorio para el uso de gcc sea de utilidad :) cualquier error que encuentren, mil disculpas y espero me lo hagan saber.. ah! me parece que hay una versión de gcc para MS- DOS.