Article View: es.comp.os.linux.programacion
Article #18435Re: Una ayuda please :), piruleta por medio.
From: Antonio Luque Estepa
Date: Mon, 06 Sep 1999 00:00
Date: Mon, 06 Sep 1999 00:00
58 lines
2892 bytes
2892 bytes
On Sun, 05 Sep 1999 20:17:15 +0200, CJR <cj.ramos@teleline.es> wrote:
> Los programadores me han preguntado que hace esta funci�n.
> Una especie de apuesta, piruleta por recompensa.
>
> La cuesti�n est� en ver quien es el primero que sabe que hace esta
> funci�n :
>
>
> void send(int* to, int* from, int count)
> {
> int n = (count+7)/8;
> switch(count%8) {
> case 0: do { *to++ = *from++;
> case 7: *to++ = *from++;
> case 6: *to++ = *from++;
> case 5: *to++ = *from++;
> case 4: *to++ = *from++;
> case 3: *to++ = *from++;
> case 2: *to++ = *from++;
> case 1: *to++ = *from++;
> } while (--n>0);
> }
> }
>
> �? con una explicaci�n sencilla creo lo entender�. (ojo que de
> programaci�n no tengo ni idea, solo trato de relacionarlo con lo poco
> que se de basic y mis conocimientos de 4 primeras paginas de libro de C)
Lo primero, recomendarte que aprendas algo de C, que siempre viene bien.
Lo segundo, aun cuando sepas programar en C, lo mas probable es que tampoco
entiendas del todo esta construccion.
Lo siguiente esta dirigido a la gente que sabe C:
Esto es un bucle que sirve unicamente para copiar una serie de bytes desde
'from' hasta 'to'. Es conocido como el Dispositivo de Duff (Duff's device),
y fue dise�ado por Tom Duff cuando trabajaba en Lucasfilm.
Aunque parezca increible, es legal intercalar los 'case' dentro del bucle
'do'.
Cuando Duff hizo publico este codigo, afirmo que la sintaxis del 'switch' en
C habia sido polemica durante mucho tiempo, en particular la caracteristica
del paso (fall through) a otro 'case' si no hay 'break'. Duff dijo que "este
codigo es un argumento en ese debate, pero no estoy seguro de si es a favor
o en contra".
En cualquier caso, es una de la construcciones mas rebuscadas que se han
hecho hasta ahora en C.
Saludos,
--
Antonio Luque Estepa
Escuela Superior de Ingenieros de Sevilla
aluque@esi.us.es
http://www.esi.us.es/~aluque
Technical Details
Message-ID:
<slrn7t7otb.2p1.aluque@bart.us.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<37D2B3AB.CC6C91AF@teleline.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,ec38c86f5338aad7 X-Google-Attributes: gidf86c8,public From: aluque@www.esi.us.es (Antonio Luque Estepa) Subject: Re: Una ayuda please :), piruleta por medio. Date: 1999/09/06 Message-ID: <slrn7t7otb.2p1.aluque@bart.us.es> X-Deja-AN: 521718708 Content-Transfer-Encoding: 8bit References: <37D2B3AB.CC6C91AF@teleline.es> Content-Type: text/plain; charset=iso-8859-1 X-Complaints-To: news@cica.es X-Trace: mercurio.cica.es 936633406 6176 193.147.160.132 (6 Sep 1999 15:56:46 GMT) Organization: Alumnos de Escuela Ingenieros, Sevilla Spain Mime-Version: 1.0 NNTP-Posting-Date: 6 Sep 1999 15:56:46 GMT Newsgroups: es.comp.os.linux.programacion