Estandarización

2009/06/11


Por muchos años, el estándar para C fue el llamado K&R (por las iniciales de Kernighan y Ritchie), debido al libro que contenía las "especificaciones primigenias" del lenguaje. Sin embargo, con el tiempo aparecieron cambios no oficiales que no se encontraban documentados por el estándar K&R.

Tal situación suponía una pérdida de la portabilidad del código de los programas, así que las acciones por evitar esto vinieron por parte de un grupo de vendedores de compiladores y de desarroladores de software, quienes en 1983 pidieron al Instituto Nacional Estadounidense de Estándares (ANSI, por sus siglas en inglés) crear un estándar para el lenguaje.
El instituto aprobó la petición, formó un comité técnico y trabajo en ello. El resultado: a finales de 1989 se aprobaba el estándar ANSI C, también llamado C89 y C90.

Se ofrecían mejoras al K&R, como el grupo de funciones comunes que pasó a ser la librería estándar. Ahora todos los compiladores de C deben de soportar esta librería, junto con especificaciones del propio compilador.

Porteriormente, se adaptaría de nuevo una estandarización sobre el ANSI C, esta vez llamado C99.

Funciones

2009/06/10

Una manera de describir un programa escrito en C -y en general, en cualquier lenguaje estructurado-, es como una pared de ladrillos, donde, por supuesto, las funciones son esos ladrillos. No hablamos de algo parecido a construir una ciudad de juguete con piezas de lego, sino más bien de una manera lógica de ordenar líneas de código.

Es importante entender que

1) Un programa es una colección de funciones
2) Hay que crear las funciones y luego juntarlas
3) Existe una función principal (main), que es de donde parten todas las demás

Por definición, una función es una subrutina que contiene sentencias, que lleva a cabo una tarea, y que retorna un valor. Cada función tiene nombre -el que uno quiera siempre que no sea 'main'- y una lista de argumentos (los valores que recibe desde una función "llamadora").

La razón por la que el nombre 'main' está apartado, es porque se presupone que habrá una función main (principal), que es la función que inicia un programa, además de ser la que lleva el orden.



Forma de las funciones

Una forma general que describe una función podría ser ésta:



Donde, en primer lugar, aparece el nombre y la lista de argumentos entre paréntesis. En segundo lugar, se declara el tipo de dato (y los modificadores, si los hay) de las variables consideradas en la lista de argumentos. Y las llaves marcan el principio y el final del cuerpo de la función, o mejor dicho, del código escrito para la función.

'return' es una sentencia muy frecuente, que fuerza el retorno desde una función. Mediante return se indicará el valor que tome la función.

Ejemplo:

multiplicacion(a, b)
int a, b;
{
//sangríareturn(a*b);
}

Otras generalidades

2009/06/06
C es un lenguaje estructurado

Es decir, utiliza bloques. Un bloque es un conjunto de sentencias relacionadas. La idea de subrutinas y variables locales sólo puede ser posible en un lenguaje estructurado.

Incluso es factible compilar por separado las rutinas, sin necesidad de que formen parte del programa -pero pudiéndose referenciar. Y es ése el concepto de librería-, de tal manera que se puedan crear librerías con funciones útiles a las que se puedan acceder desde cualquier otro programa por escribir.



Compilador

A diferencia de los lenguajes interpretados, en C es un compilador el que genera el código objeto (también código binaro, o código máquina: ceros y unos, pues) a partir del código fuente. Esto es: traducir de una vez y para siempre las instrucciones del programador, entendibles por el humano, a instrucciones que el ordenador ejecute. Después de esto, el código fuente no tiene relevancia sobre la ejecución de un programa, pudiéndose alterar sin consecuencias para el código objeto.

A menudo se utilizan los términos tiempo de compilación y tiempo de ejecución. Se refiere a tiempo de compilación cuando se trata de procesos que ocurren al compilar (normalmente, cuando el compilador revela errores sintácticos u otros). Se refiere a tiempo de ejecucuón al tratarse de lo que ocurra cuando el programa se está ejecutando (y es aquí cuando es posible distinguir fallos lógicos en el programa).



Para investigar:

-Lenguaje estructurado y lenguaje interpretado
-Intérprete y compilador

C como lenguaje de medio nivel

2009/06/04
  • Que C se considere como un lenguaje de medio nivel no quiere decir que sea peor, poco útil o menos poderoso que los de alto nivel. Nada más lejos del significado real de la expresión.
  • "Medio nivel" significa, por un lado, que es similar a los lenguajes de bajo nivel (ensambladores), por lo menos como representaciones simbólicas (instrucciones) del auténtico código máquina (ceros y unos), y por el otro lado, que contiene elementos de un lenguaje de alto nivel (estructuras de control, de decisión, etc).
  • Básicamente, un lenguaje de bajo nivel es el que está orientado especialmente a una máquina en particular (un procesador en específico, por ejemplo), mientras un lenguaje de alto nivel está orientado al programador, facilitando la lectura y comprensión del código, casi como leer en inglés. Asímismo, la portabilidad entre plataformas es -más o menos- proporcional al nivel del lenguaje empleado.

Para investigar:

-Lenguaje de medio nivel
-Lenguaje ensamblador
-Portabilidad