En lenguaje C tuvo su época de gloria en en los años 70's. Con el advenimiento de lenguajes de programación como Visual Basic, Java, PHP y otros más es bueno recordarlo. C es un lenguaje que aún vale la pena darle un vistazo.
En este post usaremos el compilador GCC:
$ gcc --version
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
holamundo.c
#include<stdio.h>
#define FIN 0
int main(int argc, char *argv[]){
puts("Hola, mundo en C");
return FIN;
}
Compilar:
$ gcc holamundo.c -o ejecutable
Ejecutar:
La evolución directa del lenguaje no fue ni Java o C#, fue C++. Si con C la curva de aprendizaje era alta, con C++ aumento de manera considerable. Podíamos hacer exactamente los mismo pero ahora tenia otras cosas más por aplicar como lo es: la programación orientada a objetos. Objetos, clases, herencia, polimorfismo era conceptos difíciles de aprender a quienes solo conocían los paradigmas funcional o estruturado. La primera diferencia es: la extensión de un programa en C++. Ya que se añade dos "pp" a la extensión clásica, quedando ".cpp" en vez de solo ".c". Otra diferencia es que introduce el concepto de manejo de excepciones, plantillas y ,como se mencionó antes, la programación orientada a objetos.
holamundo.cpp
#include<iostream>
using namespace std;
int main(int argc, char *argv[]){
cout << "Hola, mundo en C++"<<endl;
return 0;
}
En este caso usaremos el compilador G++:
$ g++ --version
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compilamos:
$ g++ holamundo.cpp -o ejecutable
Ejecutamos:
Con C comprenderemos algunos conceptos como:
- Punteros
- Asignación dinámica de memoria
- Tipos definidos y estructuras
Punteros y asignación dinámica de memoria
// Puntero, variable que almacena la memoria de otra variable
int entero = 33;
int *puntero_entero = NULL;
// Asignación dinámica de memoria
puntero_entero = (int *)malloc(1*sizeof(int));
*puntero_entero = &entero;
printf("entero:%d\n",entero);
printf("puntero:%p\n",puntero_entero);
Estructuras y tipos definidos
// Creamos un tipo definido
typedef struct Nodo Nodo;
// Creamos una estructura
struct Nodo{
long item;
int valor;
Nodo *izq;
Nodo *der;
};
Nodo *raiz = NULL;
// asignamos memoria
raiz = (Nodo *)malloc(sizeof(Nodo));
raiz->item=(long)(12000);
raiz->valor=123;
raiz->izq = raiz->der = NULL;
printf("%10ld : %10d\n", raiz->item, raiz->valor);
// ...
Con C++ conoceremos:
- Clases y objetos
- Manejo de excepciones
- Plantilas
Clases y objetos
#include<iostream>
using namespace std;
class X{
public:
X();
virtual ~X();
};
X::X(){
cout << "Objeto X creado"<<endl;
}
X::~X(){
cout << "Objeto X destruido"<<endl;
}
int main(){
X myObj;
return 0;
}
Un pequeño consejo:
Para quienes quieran aprender a programar sería bueno que le dieran un vistazo al lenguaje C (en lugar de Python o cualquier otro "más sencillo").
Muchos juran y perjuran que Python es el mejor lenguaje de programación para principiantes, pero creo que no es así. Existen aspectos de la programación que en el lenguaje C te enseñará para después pasar a otros lenguajes. Si sabes lo que es un puntero y para qué se usa, si sabes lo que es la asignación dinámica de memoria y para qué se usa y si sabes para qué y cómo usar las estructuras de datos entonces ya estarás listo para pasar a Java, Python o cualquier otro lenguaje compilado o interpretado.
Entendemos que es más fácil y entendible escribir un hola mundo de esta forma:
print("Hola, mundo en Python")
que en la forma de arriba. Pero cuando enfrentes proyectos hechos en lenguajes como Java, C++ y/o C# será más difícil entender la lógica y la complejidad del código.
Enlaces:
http://conclase.net/c