Documente Academic
Documente Profesional
Documente Cultură
Memset:
function
<cstring>
memset
void * memset ( void * ptr, int value, size_t num );
Parameters
ptr
Pointer to the block of memory to fill.
value
Value to be set. The value is passed as an int, but the function fills the block of memory
using the unsigned char conversion of this value.
num
Number of bytes to be set to the value.
size_t is an unsigned integral type.
Return Value
ptr is returned.
Example
1 /* memset example */
2 #include <stdio.h>
3 #include <string.h>
4
5 int main ()
6 {
7 char str[] = "almost every programmer should know memset!"; Edit & Run
8 memset (str,'-',6);
9 puts (str);
10 return 0;
11 }
Output:
2 Descripcin
Las directivas #ifdef y #ifndef son condicionales especializadas para comprobar si un macro-
identificador est definido o no. La mecnica es la misma que con #if, #elif, #endif ( 4.9.10d).
3 Ejemplo
#define isSp // Flag Espaol/Ingls
#ifdef isSp
# include "ztr--Sp.CH"
#define VComP "C.000621Sp"
#else
# include "ztr--Us.CH"
#define VComP "C.000621Us"
#endif
....
....
#undef isSp // A partir de aqu, isSp se considera indefinido
....
....
4 Directivas de guarda
Tenga en cuenta que el lenguaje C++ es muy proclive a que se cometan cierto tipo de errores al
trabajar con ficheros de cabecera (es seguro que ocurrir a menudo). Por ejemplo, supongamos que
tenemos una clase denominada Hotel que utiliza una clase denominada Suite y que cada una de
estas clases utiliza el mismo fichero de cabecera, por ejemplo ZonasHotel.h [2]. En este caso es
ms que posible que recibamos un error de compilacin del tipo
... Multiple declaration for 'FILE' ...
indicndonos que estamos redefiniendo los smbolos de ZonasHotel.h la segunda vez que la
cabecera es incluida.
Una solucin es disponer el cdigo como se indica:
#ifndef zonasH
#include "ZonasHotel.h"
#define zonasH // Nota [3]
#endif
... // aqu sigue el cdigo del programa
Sin embargo, esta disposicin tiene el inconveniente de que tenemos que acordarnos de definir
zonasH cada vez que vayamos a incluir la cabecera. Si lo olvidamos, volver a producirse el error
(esto es muy probable en ambientes donde trabajan varios programadores en el mismo proyecto).
Una solucin ms elegante, que recomendamos, es utilizar la disposicin anterior dentro del propio
fichero de cabecera. En nuestro caso, el fichero ZonasHotel.h tendra el siguiente aspecto:
#ifndef zonasH
#define zonasH
#endif
Si analizan con detenimiento los ficheros de cabecera de su compilador C++, comprobar que las
directivas descritas en este epgrafe son utilizadas con profusin, y como a pesar de que estn llenas
de declaraciones, la inclusin dos veces de una misma cabecera no produce ningn error de
compilacin. La razn es que los fabricantes de compiladores utilizan el truco anterior. Como
ejemplo, tomamos la cabecera <stdio.h> del compilador Borland C++ 5.5, que incluye una gran
seccin cuyo aspecto esquemtico es el siguiente:
...
#ifndef __STDIO_H
#define __STDIO_H
....
typedef struct {
...
} FILE;
...
#endif // __STDIO_H
...
Si se coloca la directiva #include <stdio.h> en un fuente, la primera vez que el preprocesador
pasa por la directiva ifndef, la macro __STDIO_H, que no est definida [1], se define en la
siguiente lnea, as como la estructura FILE. La segunda vez que se incluyera esta cabecera, el
preprocesador se encontrara con que la macro __STDIO_H ya est definida, por lo que se
saltara toda la seccin hasta el endif correspondiente. De no haberse hecho as se obtendra el error
antes mencionado. Por esta razn, este tipo de directivas condicionales, que se utilizan para que no
se produzcan declaraciones mltiples, se denominan directivas de guarda.
Nota: el compilador MS VC++ dispone de una pragma ( 4.9.10i) especfica para este fin:
#pragma once. Sirve para indicar al compilador que el fichero en que reside dicha directiva, debe
ser incluido solo una vez en cada compilacin. Por supuesto esta directiva se coloca dentro del
fichero de cabecera que deseamos no se repita. La forma de uso es la siguiente:
//Fichero ZonasHotel.h que deseamos no se repita
#pragma once
... contenido del fichero
Otra posibilidad para formar directivas de guarda es la utilizacin del operador defined (
4.9.10d). Por ejemplo, el cdigo que sigue comprueba si la constante simblica ZONASH ha sido
definida. Si no lo ha sido, se define para veces sucesivas y se compila el cdigo subsiguiente. En
caso contrario (si el cdigo ya ha sido incluido en la compilacin), todo el bloque es ignorado por el
compilador.
// ZonasHotel.h Ejemplo de fichero de cabecera
class MiClase {
...
};
#endif
http://www.cplusplus.com/reference/cstdio/vsprintf/
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/Funciones
macro
<cstdarg>
va_start
void va_start (va_list ap, paramN);
A function that invokes va_start, shall also invoke va_end before it returns.
Parameters
ap
Uninitialized object of type va_list.
After the call, it carries the information needed to retrieve the additional arguments using
va_arg.
If ap has already been passed as first argument to a previous call to va_start or va_copy,
it shall be passed to va_end before calling this function.
paramN
Name of the last named parameter in the function definition. The arguments extracted by
subsequent calls to va_arg are those after paramN.
C
C++
The parameter shall not be a parameter declared with register storage class, with function
or array type, or with a type that is not compatible with the type that results after application
of the default argument promotions.
Return Value
none
Example
1 /* va_start example */
2 #include <stdio.h> /* printf */
3 #include <stdarg.h> /* va_list, va_start, va_arg, va_end */
4
5 void PrintFloats (int n, ...)
6 {
7 int i; Edit & Run
8 double val;
9 printf ("Printing floats:");
10 //crea una lista vacias
11 va_list vl;
12 //llena la lista creo con todos los valores de los parametros
13 va_start(vl,n);
for (i=0;i<n;i++)
{
//retorna el valor del elemento de la lista, por ejemplp
14
//puedes ser el elemnto 1, o 6, es como ir manejando el indice
15
val=va_arg(vl,double);
16
printf (" [%.2f]",val);
17
}
18
//libera la lista de memoria creo
19
va_end(vl);
20
printf ("\n");
21
}
22
23
int main ()
24
{
25
PrintFloats (3,3.14159,2.71828,1.41421);
return 0;
}
The function PrintFloats takes the number of additional arguments as first argument (n),
which are then sequentially read using the cstdarg macro and printed out with a specific format.
Output:
Printing floats: [3.14] [2.72] [1.41]
See also
va_arg
Retrieve next argument (macro )
va_end
End using variable argument list (macro )
va_list
Type to hold information about variable arguments (type )
vsprintf
Write formatted data from variable argument list to string (function )
PARA OCUPAR LA LIBRERIA DE DIBUJO EN PSVITA