Antecedentes Históricos del C.
El lenguaje C fue inventado e implementado por primera vez en 1970 en AT&T por Dennis Ritchie en un DEC PDP-11 usando Unix como Sistema Operativo. C es el resultado de un proceso de desarrollo comenzando con un lenguaje anteriormente denominado BCPL, que aun hay quien lo usa principalmente en Europa.
¿Por qué el nombre de C? Por la influencia que tuvo del lenguaje B, BCPL fue desarrollado por Martin Richards e influenciado por B inventado en Bell Labs. por Ken Thompson. En los años 70´s el lenguaje B llevo al desarrollo de C.
La versión original de C fue popularizada por el libro clásico “El Lenguaje de Programación C” por Brian Kernighan y Dennis Ritchie. Durante muchos años el Estándar de C fue realmente la versión proporcionada con la versión 5 del Sistema Operativo Unix. Con la Popularidad de las Microcomputadoras se crearon muchas implementaciones de C, pero en realidad, como no existía ningún estándar aparecieron muchas discrepancias. Para Remediar la situación, el Instituto de Estándares Americano (ANSI) estableció un comité a principios del Verano de 1983 para crear el estándar que definiera de una vez por todas al lenguaje C. La definición resultante, el estándar ANSI o ” ANSI C ” que se esperaba fuera aprobada a fines de 1988.
La mayoría de las características del estándar ya se encuentran soportadas por compiladores modernos.
Uno de los propósitos del estándar fue asegurar que la mayoría de los programas existentes pudiesen permanecer validos o, al menos, que las computadoras pudieran producir mensajes de advertencia acerca de nuevos comportamientos.
Una Segunda contribución significativa del estándar es la definición de una biblioteca que acompañe a C, la cual especifica funciones para tener acceso al Sistema Operativo (p/e leer archivos, escribir en ellos etc.) E/S con formato, Asignación de Memoria, Manipulación de Cadenas y otras actividades semejantes, una colección de Headers estándar proporcionan un acceso uniforme a las declaraciones de funciones y tipos de datos.
La mayor parte de las bibliotecas esta estrechamente modelada con base en la biblioteca estándar del sistema Unix.
BCPL y B son lenguajes “carentes de Tipos”. En contraste, C proporciona una variedad de tipos de datos. Los tipos de datos fundamentales son caracteres, enteros y números de punto flotante de varios tamaños. Además existe una jerarquía de tipo de datos derivados, creados con apuntadores, arreglos, estructuras y uniones. Las expresiones se forman a partir de operadores y operandos, cualquier expresión, incluyendo una asignación o una llamada a función, puede ser una proposición. Los apuntadores proporcionan una aritmética de direcciones independiente de la maquina.
C proporciona las construcciones fundamentales de control de flujo que se requieren en programas bien estructurados: Agrupación de proposiciones, toma de decisiones (if-else), selección de un caso entre un conjunto de ellos (switch), iteración con la condición de paro en la parte superior (while, for) o en la parte inferior (do) y terminación prematura de ciclos (break).
Dentro de los cambios de C, hay uno de relevancia, en New Jersey en 1980, Bjarne Stroustrop desarrollo en Bell Labs. a C++ o llamado también “C con clases”, por lo que en 1983 se cambio el nombre por el de C++. Desde entonces ha experimentado 2 revisiones de importancia, una en 1985 y otra en 1989.
El propósito de C++ es extender a C para proporcionar ocultamiento de información y un estilo de programación que haga énfasis en las Clases de Objetos.
La compatibilidad con C, la eficiencia y la verificación estricta en tiempo de compilación fueron las metas principales para el diseño de C++:
- La compatibilidad con C permite que el código fuente existente en C continúe utilizándose. La mayoría de las implementaciones de C++ son incluso “compatibles en ligado ” con C, lo cual significa que un código en C++ compilado por separado puede ligarse con acervos en C ya existentes, sin necesidades de compilar de nuevo los acervos.
- Ya se destaco la eficiencia, por la cual no debe de haber ningún problema al usar C++ en lugar de C.
La similitud entre C y C++ es sin embargo engañosa, debido a que C++ requiere un método de programación nuevo, un nuevo paradigma llamado “Orientado a Objetos” que da nuevos beneficios con el uso de las clases y los objetos.
Stroustrup [1986] advierte: “Mientras mas se conoce a C, es mas difícil evitar escribir en C++ con estilo C, y perder ahí algunos beneficios potenciales de C++ “.
Como podrá comprobar, una de las razones que motivaron al desarrollo de C++ fue la de permitirle al programador manejar programas de una complejidad cada vez mas creciente.
Es un hecho que C++ es un Superconjunto de C; por lo que la mayoría de los programas de C son también implícitamente programas de C++, sin embargo, hay una cuantas diferencias mínimas entre ANSI C y C++ que impiden que pocos programas de C se puedan compilar mediante un compilador C++ o viceversa:
- Es un hecho que C++ es un Superconjunto de C; por lo que la mayoría de los programas de C son también implícitamente programas de C++, sin embargo, hay una cuantas diferencias mínimas entre ANSI C y C++ que impiden que pocos programas de C se puedan compilar mediante un compilador C++ o viceversa:
- En C una constante de carácter se eleva de forma automática a un entero. En C++ esto no sucede.
- En C no es un error declarar una variable Global varias veces (aunque esto sea una mala practica) En C++ esto es un error.
- En C un identificador puede tener hasta 31 caracteres de longitud. En C++ no hay tal limite. No obstante que desde un punto de vista practico, identificadores extremadamente largos son difíciles de manejar.
- El uso en C++ de la cabecera IOSTREAM.H y todas de sus funciones que en C no se manejan.
- El manejó en C++ con todas sus características de Clases y Objetos tal como los Constructores, destructores, funciones amigas, sobrecarga de funciones, referencias, herencia, poliformismo, encapsulación, abstracciones etc. que en C no se manejan.
- El uso de la cabecera COMPLEX.H para el manejo de números complejos.
- El uso en C++ de la clase BCD. Otra manera de representar un numero real es la de usar la técnica de Decimal Codificado en Binario o BCD. Su principal ventaja es que no se producen errores de redondeo, esto es mediante la cabecera BCD.H
- Las Extensiones de los archivos de cada uno es para ANSI C *.c para C++ *.cpp
Ventajas
- Lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas.
- A pesar de su bajo nivel es el lenguaje más portado en existencia, habiendo compiladores para casi todos los sistemas conocidos.
- Proporciona facilidades para realizar programas modulares y/o utilizar código o bibliotecas existentes.
Palabras clave
asm
and
and_eq
auto
bitand
bitor
bool
break
case
catch
char
class
compl
const
const_cast
continue
default
delete
do
double
dynamic_cast
else
enum
explicit
export
extern
false
float
for
friend
goto
if
inline
int
long
mutable
namespace
new
not
not_eq
operator
or
or_eq
private
protected
public
register
reinterpret_cast
return
short
signed
sizeof
static
static_cast
struct
switch
template
this
throw
true
try
typedef
typeid
typename
union
unsigned
using
virtual
void
volatile
wchar_t
while
xor
xor_eq