[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