[C con Clase] Para que sirve esta notación?? ^= y algunas mas

Steven Davidson srd4121 en njit.edu
Vie Oct 8 10:04:29 CEST 2010


Hola Miguel,

On 10/8/2010 3:10 AM, Miguel Olave wrote:
> Muchas gracias Steven, como siempre ayudando al necesitado, sabía que
> ese operador en algún momento lo había tenido que ocupar pero no me
> acordaba para que servía.
>

De nada; para eso estoy :)

> Estoy revisando un código que sirve para recuperar el estatus de
> termino de hilos y aparecen otras notaciones que desconozco:
>
> 1.- Esto aparece en una librería .h. ¿Para que son los puntos
> suspensivos?
>

Es la forma de indicar a C/C++ que la función acepta una cantidad 
variable de argumentos. Por ejemplo, 'printf()' y 'scanf()' funcionan de 
esta manera. Lo más seguro es que estas funciones funcionan (valga la 
redundancia) similarmente a las anteriores. Pasas una cadena que 
representa un formato para indicar a la función cuántos parámetros 
posteriores vas a pasar y cómo deben ser interpretados.

Para más información acerca de la creación de este tipo de funciones, 
consulta el capítulo 20: 
http://c.conclase.net/curso/index.php?cap=020b#PAR_VARIABLES

> void err_dump(const char *, ...); /* {App misc_source} */
> void err_msg(const char *, ...);
> void err_quit(const char *, ...);
> void err_exit(int, const char *, ...);
> void err_ret(const char *, ...);
> void err_sys(const char *, ...);
>
> void log_msg(const char *, ...); /* {App misc_source} */
> void log_open(const char *, int, int);
> void log_quit(const char *, ...);
> void log_ret(const char *, ...);
> void log_sys(const char *, ...);
>
> 2.- Lo otro es que aparece el siguiente código que no se me hubiese
> ocurrido posible. Retornar en una función void de esta forma, :
>
> void *
> thr_fn1(void *arg)
> {
> printf("thread 1 returning\n");
> return((void *)1);
> }
>

Puedes retornar lo que quieras, todo depende de la interpretación que 
apliques.

> El asunto es que esa función es ocupada para analizar el el retorno de
> una hebra
> err = pthread_create(&tid1, NULL, thr_fn1, NULL);
> if (err != 0)
> err_quit("can't create thread 1: %s\n", strerror(err));
> err = pthread_join(tid1, &tret);
> if (err != 0)
> err_quit("can't join with thread 1: %s\n", strerror(err));
>
> En este punto pthread_join puede manejar ese tipo de retornos??
>
> Lo pregunto porque no he podido compilar los archivos debido a que me
> lanza el siguiente error:
>
> carlos$ *cc exitstatus.c -l pthread -o exitstatus*
> /tmp/ccQGYKoy.o: In function `main':
> exitstatus.c:(.text+0x87): undefined reference to `err_quit'
> exitstatus.c:(.text+0xd2): undefined reference to `err_quit'
> exitstatus.c:(.text+0x10d): undefined reference to `err_quit'
> exitstatus.c:(.text+0x15f): undefined reference to `err_quit'
> collect2: ld returned 1 exit status
>
> Si alguien pudiese jugar y compilarlos y pillar el error lo
> agradecería nuevamente, adjunto los archivos. En caso contrario no
> hay problema, creo que sobreviviré al certamen de mañana (o eso
> espero).
>

Tienes errores de enlazado. Esto significa que no has enlazado la 
biblioteca requerida que contiene las implementaciones de 'err_quit()'.


Espero que todo esto te ayude.

Steven





Más información sobre la lista de distribución Cconclase