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; }
$ gcc holamundo.c -o ejecutable
$ ./ejecutable
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; }
$ 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.
$ g++ holamundo.cpp -o ejecutable
$ ./ejecutable
Con C comprenderemos algunos conceptos como:
- Punteros
- Asignación dinámica de memoria
- Tipos definidos y estructuras
// 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);
// 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
#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")
Enlaces:
http://conclase.net/c