🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #18435

Re: Una ayuda please :), piruleta por medio.

#18435
From: Antonio Luque Estepa
Date: Mon, 06 Sep 1999 00:00
58 lines
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-mail
References: <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