C / C++

 

Introduccion:

Para desarrollar aplicaciones en Linux, los lenguajes mas utilizados son C y C++.
C++ a lo largo de su vida ha sufrido diversos cambios, basicamente tres versiones:

  • C++ ISO del año 1998
  • C++ ISO del año 2003
  • C++ ISO del año 2011

Y el compilador estrella que siempre es compatible con los ultimos standards es GCC (http://gcc.gnu.org/) que ademas sirve para compilar otros lenguajes.
Para linkear los objetos, resultado de la compilacion, se usa el linker ld que es parte de la GNU Binutils (http://www.gnu.org/software/binutils/).

 

C++ Standard Library:

Si pensas ser un programador C++ lo minimo que debes conocer es el lenguaje y la C++ Standard Library.
Como pensamos usar GCC, vamos a utilizar libstdc++ (http://gcc.gnu.org/libstdc++/) que es la version GNU y ya viene dentro del paquete GCC.
Esta libreria incluye headers compatibles con las tres versiones ISO que mencione mas arriba.
Todo esta organizado dentro del namespace std, salvo algunas excepciones con los headers compatibles con la C Standard Library.
Ademas trae los 18 headers que hereda la C Standard Library, pero con los nombres cambiados con una letra "c" adelante y sin el ".h" al final.
Por ejemplo si antes incluias <stdio.h> ahora es <cstdio>.

 

Nuestro primer programa C++ con GCC:

Dentro de GCC esta el compilador C++  g++ que usa por defecto la libstdc++.
Podes usar cualquier editor de texto, a mi me gusta GNU nano (http://www.nano-editor.org/) porque ya viene de regalo en casi todas las distros.
Archivo prueba.cpp:

#include <iostream>
using namespace std;
int main() {
 cout << "Saludos desde www.lucianoaibar.com" << endl;
 return 0;
}

Para compilarlo usar: g++ prueba.cpp
El resultado va a ser un ejecutable llamado a.out.
"a.out" era el nombre y formato que utilizaba la computadora con Unix de Colon cuando descubrio America. Ya no se usa mas y aunque GCC le de ese nombre, en realidad es un ejecutable de tipo ELF.
Ejecutalo con ./a.out (el ./ antes es por si $PATH no incluye la ruta actual).

Siempre podes especificar mas parametros para obtener mejores resultados.
Por ejemplo:

g++ -s -g0 -pipe -static -Wall -O3 -o "prueba" prueba.cpp

Con -s y -g0 vamos a eliminar algunos datos en el ejecutable que, en producto final, no es necesario conservar.
-pipe es solo para decirle a la toolchain que use "pipes" (tuneles en memoria) en vez de archivos para pasar parametros entre cada herramienta.
-static compila usando librerias estaticas en vez de usar las compartidas (shared). Ojo que el ejecutable queda mucho mas pesado en tamaño. No siempre es buena idea.
-Wall para que nos avise de cualquier problemita.
-O3 para maxima optimizacion.
Y "-o nombre" para darle un nombre al ejecutable o libreria que estas creando.

 

Comentarios