3. Componentes de C++
3.1 Directivos
#include
<iostream> // una directiva al preprocesador
C++ utiliza un preprocesador, al igual que su predecesor, el lenguaje C.
Un preprocesador es un programa que actúa sobre el código fuente antes que el
propio compilador. En la sentencia para el preprocesador #include, su acción es
simple, remplaza la sentencia por el contenido de los archivos citados en la
sentencia #include. El nombre del archivo está encerrado entre los símbolos
"<" y ">".
En este caso se ha hecho referencia al archivo iostream. Este archivo posee las definiciones utilizadas por cout para visualizar el mensaje. Sin esta directiva la compilación no hubiera procesado la sentencia cout ni hubiera reconocido los símbolos de los operadores de inserción (<<) ni de extracción (>>). Hay otras sentencias para el preprocesador que se verán más adelante.
Los compiladores C++ traen consigo muchos archivos de encabezados (header files) que brindan soporte a distintas ramas de funcionalidades. En C este tipo de archivos lleva la extensión .h (por header file), pero en C++ no lleva ninguna extensión en particular. En el ejemplo se hace referencia al archivo de encabezado <iostream>, un archivo que brinda soporte a las funciones de entrada y salida.
La versión C de <iostream> es <iostream.h>. Pero en este caso se ha incluido la versión C++, por eso se debe incluir la directiva using namespace.
En este caso se ha hecho referencia al archivo iostream. Este archivo posee las definiciones utilizadas por cout para visualizar el mensaje. Sin esta directiva la compilación no hubiera procesado la sentencia cout ni hubiera reconocido los símbolos de los operadores de inserción (<<) ni de extracción (>>). Hay otras sentencias para el preprocesador que se verán más adelante.
Los compiladores C++ traen consigo muchos archivos de encabezados (header files) que brindan soporte a distintas ramas de funcionalidades. En C este tipo de archivos lleva la extensión .h (por header file), pero en C++ no lleva ninguna extensión en particular. En el ejemplo se hace referencia al archivo de encabezado <iostream>, un archivo que brinda soporte a las funciones de entrada y salida.
La versión C de <iostream> es <iostream.h>. Pero en este caso se ha incluido la versión C++, por eso se debe incluir la directiva using namespace.
#include
<iostream> // una directiva al preprocesador
using namespace std;
using namespace std;
Namespace es una colección de nombres y de identificadores C++. El uso
de namespace impide la aparición de conflictos entre bibliotecas que usan un
mismo nombre o identificador. Esto significa que la variable cout que se usa en
la función y que está definida en <iostream> se llama en realidad
std::cout. De esta manera se puede hacer referencia a cout sin tener que
codificar siempre el prefijo std.
3.2 Declaraciones globales
Las variables globales se usan de forma
frecuente para pasar información entre diferentes secciones del código que no
comparten una relación de "función llamadora" - "función
llamada", como ocurre con hilos concurrentes
y módulos para el manejo de señales. Los lenguajes de programación donde cada archivo define un espacio de nombres
implícito eliminan la mayor parte de los problemas de los lenguajes con nombres
de espacios globales, aunque pueda haber algunos problemas si no se tiene
cuidado a la hora de encapsular el código. Sin las restricciones adecuadas (como
por ejemplo con un mutex), el código que usa
variables globales no será a prueba de hilos excepto para los valores de sólo lectura
en la memoria protegida.
Ejemplo de una variable global en C++:
#include <iostream>
int global = 3; // Esta es la variable global.
void ChangeGlobal()
{
global = 5; //
Se referencia la variable global en una función.
}
int main()
{
std::cout <<
global << '\n'; // Se referencia la variable global en una segunda
función.
ChangeGlobal();
std::cout << global << '\n';
return 0;
}
Dado que la variable es de ámbito global, no hay
necesidad de pasarla como parámetro a otras funciones. La variable global
pertenece a todas las funciones del programa.
El resultado será:
3
5
El uso de variables globales dificulta la
legibilidad del código fuente. Dado que en cualquier parte del programa y en
todo momento se puede cambiar el valor de la variable, para entender el uso de
la variable suele ser necesario tener que comprender el funcionamiento de una
parte amplia del programa. También dificultan la separación del código en bibliotecas, ya que muchos
sistemas (como por ejemplo DLL) no soportan
la visualización directa de variables globales en otros módulos. La
denominación de las variables también puede desembocar en problemas con la
denominación ya que una variable global corre el riesgo de ser usada, por
ejemplo, en lugar de una variable local. Una variable local con el mismo nombre
puede ocultar el acceso de la variable global, dificultando aún más la
legibilidad del código. Por todo ello, el uso de variables globales puede
provocar efectos secundarios difíciles de
entender, predecir, y hacen la búsqueda de errores más compleja. Las variables
globales también dificultan someter las diferentes unidades de software a tests
de forma aislada, repercutiendo así en una posible reducción de la calidad del
código.
3.3 Funciones main
Todo programa C++ tiene una
función main( ) que es el punto inicial de entrada al programa. Su estructura
es:
main( )
{
… bloque de estatutos
}
·
Los estatutos incluidos entre
las llaves {…} se denominan bloque.
·
Un programa debe tener sólo
una función main( ). Si se intenta hacer dos funciones main ( ) se produce un
error.
·
Además de la función main( ),
un programa en C++, consta de una colección de funciones.
COMENTARIOS
Los comentarios son mensajes que el programador escribe dentro del código,
pero que el compilador no los detecta. Se usan para documentar los programas de
acuerdo a las necesidades del programador. Existen dos formas de escribir
comentarios
·
// (Doble slash) este par de caracteres genera un
comentario de una línea después de su aparición. Ejemplo:
int x=100; // declaración de la variable x inicializada en 100
·
/* */(Slash asterisco asterisco slash) Este comentario
puede abarcar varias líneas de código. Todo lo que se encuentre en medio de
estas parejas de caracteres es un comentario.
ejemplo:
/* Programa ejemplo1
Desarrollado por: Samuel Padilla
Fecha: Agosto 10 de 2010 */
Ejemplo1: PROGRAMA QUE
IMPRIME UNA CADENA DE TEXTO CONSTANTE (para dev C++)
#include “iostream” //libreria o
biblioteca
using namespace std;
int main( ){//en dev C++ no se
usa void main
cout<<“primer programa en
C++”<<endl;
system(“pause”);
}
·
La primera línea de código es
una directiva y se usa para llamar un archivo llamado iostream que contiene la
función que nos permite imprimir en la pantalla (leer en este blog la entrada
DIRECTIVAS)
·
El programa es básico, utiliza
la función cout que esta en la librería iostream para imprimir
en la pantalla lo que el usuario ubique dentro de las comillas.
·
Todos los programas que
desarrollemos en esta primera parte del curso tendrán una estructura similar.
La diferencia estará en la parte encerrada entre corchetes { } es decir el
bloque de código
ejemplo 2: PROGRAMA CON
VARIABLES DE TIPOS DE DATO SIMPLE INICIALIZADAS (para dev C++)
#include
“iostream”
using
namespace std;
int
main(){
int
x=1200;
float
nota=4.9;
double
largo=0.0000000001;
char
miletra=’R’;
string
c=”AMO la programacion de computadoras”;
cout<<“La
variable entera fue iniciada en “<<x<<endl;
cout<<“La
variable flotante fue iniciada en “<<nota<<endl;
cout<<“La
variable doble precision fue iniciada en “<<largo<<endl;
cout<<“La
variable caracter fue iniciada en “<<miletra<<endl;
cout<<“La
variable cadena (string) fue iniciada en “<<c<<endl;
system(“pause”);
}
En
el código anterior se declara una variable de cada tipo, se inicializa y se
imprime.
3.4 Funciones definidas por el usuario
Procedimiento
Para utilizar el archivo de configuración a fin de crear el programa de función definida por el usuario udfsrv, a partir del archivo fuente udfsrv.c, siga estos pasos:
- Asigne a la variable de entorno UDF el nombre del programa, de este modo:
- En el shell bash o Korn:
export UDF=udfsrv - En el shell C:
setenv UDF udfsrv
- En el shell bash o Korn:
- Si su directorio de trabajo contiene un archivo udf.ics, resultante de la creación de un programa diferente con el archivo udf.icc, suprima el archivo udf.icsmediante este mandato:
rm udf.icsSi para el mismo programa que ahora creará de nuevo ya existe un archivo udf.ics, no es necesario suprimir el archivo. - Compile el programa de ejemplo, especificando:
vacbld udf.iccNotaEl mandato vacbld está incluido en VisualAge C++.
La biblioteca de UDF se copia en el directorio sqllib/function del servidor.
Si es necesario, establezca la modalidad de archivo para la función definida por el usuario a fin de que la instancia de DB2 pueda ejecutar la función.
Una vez creado el programa udfsrv, puede crear la aplicación cliente, udfcli, que llama al programa. El programa se proporciona en versiones para CLI de DB2 y para SQL incorporado.
Puede crear el programa udfcli de la CLI de DB2, a partir del archivo fuente udfcli.c, contenido en sqllib/samples/cli, utilizando el archivo de configuracióncli.icc.
Puede crear el programa udfcli de SQL incorporado, a partir del archivo fuente udfcli.sqc, contenido en sqllib/samples/c, utilizando el archivo de configuraciónemb.icc.
Para invocar la UDF, ejecute la aplicación solicitante de ejemplo entrando el nombre del ejecutable:
udfcli
La aplicación solicitante llama a la función ScalarUDF de la biblioteca udfsrv.

Comentarios
Publicar un comentario